1

多くのプロジェクトで使用されるいくつかの計算を含む h ファイルと cpp ファイルがあります。

今、私はそれらを別のdllに入れようとしたので、ファイルはすべてのプロジェクトに含まれるべきではありません。

リンクすると、構造体の LNK2001 (未解決のシンボル) エラーが発生しますが、lib と dll は適切な場所にあります。

私は

#ifdef TOOLS_EXPORTS
#define TOOLS_API __declspec(dllexport)
#else
#define TOOLS_API __declspec(dllimport)
#endif

このマクロは、いくつかのメソッドでうまく機能します。

構造体はそのように定義されています

TOOLS_API typedef  struct  {
char Name[128];
}  uTSystem;

そして、dll からこの構造体を使用するファイルでは、正しく定義されています (?)

extern uTSystem ABC;

エラーメッセージは次のとおりです。

error LNK2001: Nichtaufgeloestes externes Symbol "struct uTSystem ABC" (?ABC@@3UuTSystem@@A)

ヒントはありますか?ありがとうございました

4

1 に答える 1

1

DLL をコンパイルするときに TOOLS_EXPORT を定義したと仮定すると、変数をエクスポートしますABC。あなたのコードでは、extern uTSystem ABC;それをヘッダーファイルに使用するDLLと共有することは問題ありませんとして定義します。

extern は変数 ABC があることを宣言しますが、.cpp ファイルの 1 つでそれを定義する必要があります。

uTSystem ABC;

前なしexternで。ファイルは次のようになります。

---- ツール.h ----

#ifdef TOOLS_EXPORTS
#define TOOLS_API __declspec(dllexport)
#else
#define TOOLS_API __declspec(dllimport)
#endif

TOOLS_API typedef  struct  {
char Name[128];
}  uTSystem;

extern uTSystem ABC;

---- ツール.cpp ----

#include tools.h

uTSystem ABC;
于 2010-10-21T17:20:24.290 に答える