

はじめまして、現在Visual Studioを使い簡単なアプリケーションを作っているのですが、一点つまったところがあったので質問させていただきます。

以下のC++で書かれた3ファイルがあります  
・app.exe(A.dllを参照)  
・A.dll(B.dllを参照)  
・B.dll

app.exe+A.dllのみを配布する場合、  
Visual Studio 2013でA.dllをビルドするときにB.dllを含めてビルドすることは可能でしょうか。

app.exeには手を加えたくないので、ILMerge以外の方法で探しております。

回答、よろしくお願いします。


CC BY-SA 3.0
2016-02-13T13:15:21.957
22048
2016-02-15T22:08:39.823
14389
question
c++ visual-studio
visual studio 2013でDLLをビルドするときの質問


仮に B.dll が Microsoft の提供しているものだとすると、  
その B.dll は `Microsoft Update` で更新されうるものなわけです。  
他社 DLL を自作プロダクトに「組み込む」形で配布しちゃうと  
Microsoft (だけでなく Apple なり Oracle なりどこであれ) がそれを更新したら、  
自作プロダクト側でも組み込み直し、再配布が必要と言うことになりそうです。

「再配布可能なフレームワーク」なんてものは当該メーカ側で用意したインストーラで  
一式ごそっと入れちゃうのがお作法だと思います (`vcredist_x86.exe` みたいに) 。  
その後のセキュリティ系更新等があっても `Microsoft Update` で更新してね、で済みます。

そもそもオイラ的には EXE と DLL だけ配布するってのはありえなくって  
[wix](/questions/tagged/wix "'wix' のタグが付いた質問を表示") や
[installshield](/questions/tagged/installshield "'installshield'
のタグが付いた質問を表示") 等でインストーラ作って配布するものだと思います。  
自作インストーラが、再配布可能なフレームワークのインストーラを呼ぶのは自然な話、  
お作法にかなっている普通の方式です。  
あまり凝ったことを考えずにフツーに配布するのが良い、に１票を投じておきます。


CC BY-SA 3.0
2016-02-15T04:56:33.607
22094
2016-02-15T04:56:33.607
8589
22048
answer


Visual C++の機能としてはありませんが、実現することは可能です。  
A.DLLにB.DLLをリンクする時に遅延読み込みに指定しておいて、A.DLLのDllMain等の処理でB.DLLファイル作成すれば実現できるはずです。


CC BY-SA 3.0
2016-02-15T22:08:39.823
22129
2016-02-15T22:08:39.823
12774
22048
answer