|
分類:[C/C++]
こんばんは。 DLLを使用するアプリケーションのビルド方法についてご教示ください。
Visual Studio 2005にて以下のWindowsアプリケーションを作成しています。 ・EXE(自作) Windowsアプリケーション C++プロジェクト MFC使用 次のDLLをインポート ・DLL(他者作) C++使用(MFC未使用)らしい ヘッダ:sample.h インポートライブラリ:sample.lib ダイナミックライブラリ:sample.dll の3つが提供されている。
上記環境にて#include "sample.h"してコンパイルすると 「C2371 'DBID' 再定義されています。異なる基本形です。」 というコンパイルエラーが発生しました。 sample.hを見ると、確かにDBIDという型が独自に定義されており、 さらに調べてみると、どこかで#includeされているらしい WindowsAPI?の"oledb.h"にもDBIDが定義されていました。 (両者で定義内容は異なります)
エラーの原因は名前の衝突と思いましたので、sample.hを#includeするところを
namespace FOO { #include "sample.h" } using namespace FOO;
としてみたところ、コンパイルは正常に終了するようになりましたが、 「LNK2019 未解決のシンボル"public __thiscall FOO::CBar::CBar(void)" (??0CBar@FOO@@QAE@XY) が 関数"public void __thiscall CBaz::CBaz(void)" (?CBaz@CBaz@@QAEXXY) で参照されました。」 というリンクエラーが出るようになりました。 どうやら名前空間の"FOO"も含めた名前でエクスポート関数を捜しているようです・・・・ (一応DependencyWalkerで確認してみましたが、当然FOOという文字列はない名前でした) プロジェクトの設定の「リンカ」−「入力」の「追加の依存ファイル」にて「sample.lib」は登録しており libファイルは読み取っているものと考えています。
このような場合、どのように記述(設定)すれば別の型としてコンパイル、リンクができるでしょうか?
|