DLLとメインの実行可能ファイルがあり、メインの実行可能ファイルがDLLのインポートライブラリからのシンボルにリンクしておらず、DLL .mapファイルのdeclspecが一致しておらず、マングルされたC++名も一致していません。C ++のものをリンクさせることができないときにあなたがする通常のことをしたのに、なぜか理解できません。
私のヘッダーは次のようなものを定義しています:
#ifdef MY_MODULE
#undef CLASS_EXPORT
#define CLASS_EXPORT __declspec(dllexport)
#else
#undef CLASS_EXPORT
#define CLASS_EXPORT __declspec(dllimport)
#endif
私のクラスは正しくエクスポートされているようですが、.mapファイルは私が間違っていると思う奇妙なことを示しています:
6 ?CreateDataArea@@YAKPAGPBD111PAVCObject@@K@Z (unsigned long __cdecl
CreateDataArea(unsigned short *,char const *,char const *,char const *,
char const *,class CObject *,unsigned long))
上記のマングルされた名前は@@YAK...
リンクエラーは次のとおりです。
1>Device.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) public: unsigned long __thiscall
CCommonMemory::CreateDataArea(unsigned short *,char const *,char const *,
char const *,char const *,class CObject *,unsigned long)"
(__imp_?CreateDataArea@CCommonMemory@@QAEKPAGPBD111PAVCObject@@K@Z) referenced
in function "public: __thiscall CDevice::CDevice(void)" (??0CDevice@@QAE@XZ)
では、declspecマクロを構成しているときに、マングルされた名前が@@QAEK
異なるのはなぜですか。また、マクロで定義されているときに.mapファイルに __thiscall
呼び出し規約が表示されるのはなぜ__declspec(dllexport)
ですか。
__declspec(dllimport / dllexport)マクロを実行するのを忘れたのとまったく同じですが、実行しました。
エクスポートされた各メソッドにCLASS_EXPORTを配置してみましたが、クラス宣言の最初の行で変更せずに試しました。