あるdllを必要とするexeがあります。
配布する際、exeのみとしたく、
exeにdllを組み込んで
1つのexeにしたいのですがうまくいきません。
試したことは、
「構成プロパティ」→「C/C++」→「コード生成」→「ランタイムライブラリ」
にて
「マルチスレッド (/MT)」
に設定しました。
dllの呼び出し方法は、
静的リンクと動的リンクともに試しましたが、
実行時にdllが要求されます。
静的リンクでは
起動時にdllがない旨のメッセージボックスが表示されます。
動的リンクでは
にてLoadLibrary(xxxx.dll)はNULLを返します。
どうぞ、ご教授お願いいたします。
「ランタイムライブラリ」の項目で変更できるのは,CRTと呼ばれる,VC++の標準ライブラリの
種類のみです。
ここの項目を変更しても,他のDLLの取り扱い方に変化はありません。
基本的に,DLLをEXEに組み込むことはできません。
リソースにでも持っておき,実行時にテンポラリディレクトリあたりに書き出して
LoadLibrary,が一番現実的かと思います。
一応,LoadLibrary from memoryで探すと
http://www.codeproject.com/Tips/430684/Loading-Win-DLLs-manually-without-LoadLibrary
等々が見つかるのですが,PEの再配置ヘッダ見て云々と,LoadLibraryがやっていることを自前
でやる必要があり,さらに制限が色々あるようです。
これでもよいというのであれば,先人のコードを使ってみるのもよいとは思います。
当該DLLをビルド可能な完全なソースがある場合は、
そのソースを使って、スタティックライブラリを作成し、
それをEXEにリンクします。一部ソースの変更が必要になるかもしれません。
さて、配布上の煩雑さだけの問題であるなら、
1.EXE+DLLの自己解凍圧縮ファイルを作成する。
2.セットアッププロジェクトを作成してインストールファイルを作成する。
等も考えられます。一般には2.の手段が適当です。
また、
3.MFC等を使用している場合は事実上2.しか手段はありません。
インストールに、c:\windows c:\windows\system等にDLLをコピーして動的リンク
(LoadLibrary)かな?