作成したDLLをインポートして実行するとdllint.cppでおこられる


abc  2013-03-21 02:13:47  No: 73644

VC++2010においてレギュラーDLL(Aとする)を作成しており、そのDLLからは他のDLLがインポートされています。
Aのビルドは行われるのですが、AをテストMFCプロジェクトにインポートして使用するとdllint.cppの703行目でDebug Assertionが出て怒られます。Aに依存しているDLLは全てAと同じディレクトリに配置しています。
これはどのように解決したらよいでしょうか。また、問題としてなにが考えられるでしょうか。


abc  2013-03-21 03:36:01  No: 73645

上記dllint.cppをdllinit.cppと修正して読み替えてください。


オショウ  2013-03-21 15:47:03  No: 73646

そのAを呼び出す元のEXEも同じディレクトリにあるのでしょうか?
EXEがDLLを検索する場合、環境変数のPATHを使って探しますので、
PATHにAのあるディレクトリ設定が無いか、EXEとAが同じディレクトリ
に無いか・・・です。

以上。


abc  2013-03-21 22:26:32  No: 73647

DLLはEXEと同じパス、若しくはDebugモード時に優先して検索されるプロジェクトファイルのパスにあり、レギュラーDLLではなくWin32プロジェクトでアプリケーションタイプをDLL(MFC使用)にして同じようにサードパーティライブラリを動的リンクさせて、他のプログラムからAをインポートするとエラーが出ません。
レギュラーDLLはインポートの手順が特殊なのでしょうか。


abc  2013-03-21 23:29:10  No: 73648

どうやらDLL側でインポートしているboostライブラリがホストプログラム側でインポートしているboostライブラリとぶつかっているようです。DLL側でboostを使用せずにビルドし、ホストプログラムでインポートしたらdllinit.cppでDebug Assertionが出なくなりました。
DLL側でホストプログラムと同じバージョンのboostを使用したい場合はDLL版のboostを使うしか無いのでしょうか。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加