1

DLL と lib ファイルがあります。それらをルート ソース ディレクトリに含め、追加の依存関係を通じて lib 参照を追加しました。ただし、次のエラーが表示されます。

1>main.obj : error LNK2001: unresolved external symbol "class game::c_State game::state" (?state@game@@3Vc_State@1@A)
fatal error LNK1120: 1 unresolved externals

「engine.h」からこれを参照します:

extern __declspec(dllexport) c_State state;

"state.cpp" (DLL のソースから) では、次のように宣言されています。

namespace game
{
    c_State state;
    //clipped for relevance
}

DLL を特定の場所に配置する必要があるのでしょうか。Windows はどこを見ればよいか知っていますか? プロパティのどこにもDLLファイルを具体的に参照する場所が見つかりませんでした.libファイルのみです。

また、変数を宣言するとき、または関数のみを宣言するときに __declspec(dllexport) が必要ですか?

前もって感謝します!

4

1 に答える 1

1

宣言ではなく定義に __declspec(dllexport) を適用する必要があります。また、宣言には、他のプロジェクトで __declspec(dllimport) が必要です。したがって、.h ファイルでは次のようになります。

#undef EXPORT
#ifdef FOO_EXPORTS
#  define EXPORT __declspec(dllexport)
#else
#  define EXPORT __declspec(dllimport)
#endif

extern EXPORT int shared;

DLL ソース コード ファイル内:

__declspec(dllexport) int shared;

DLL プロジェクトでは、Project + Properties、C/C++、Proprocessor を使用します。プリプロセッサ定義に FOO_EXPORTS を追加します。

于 2012-02-02T01:00:25.710 に答える