1

その中にいくつかのメソッドと変数を定義するクラスを持つdllがあります。私はそれをマークしました

__declspec(dllexport)

同じソリューションのwin32アプリケーションプロジェクト内に.hヘッダーをインポートしました。関数を使用することはできますが、プロジェクトをコンパイルしようとすると、外部シンボルが解決されないというエラーがたくさん発生します。なんで?

4

2 に答える 2

2

そのクラスをインポートするアプリケーションの場合、クラスを次のようにマークする必要があります。

__declspec(dllimport)

の代わりにdllexport

また、DLLのインポートライブラリ(.libファイル)とリンクしていることを確認する必要があります。

于 2011-02-13T11:30:44.647 に答える
2

この非常に一般的なタスクでマクロを使用する標準的な方法については、http ://wiki.tcl.tk/8721を参照してください。

基本的な考え方は、次のようにマクロを定義することですMY_API

    #ifdef BUILD_MYAPI
    #    define MY_API __declspec(dllexport)
    #else
    #    define MY_API __declspec(dllimport)
    #endif

ヘッダーファイルで関数またはクラスを宣言するときは、次のようにします。

void MY_API myApiFunction(int x);

関数の本体を宣言する独自のdllをビルドするときは、の定義をBUILD_MYAPIビルドに追加します。dllexport
これにより、追加しない他のdllのヘッダーを含めると、すべてのデクレレーションが発生するBUILD_MYAPIため、減速は次のようになります。VisualStudioでdllimport
コンパイルする場合、プロジェクトのプロパティ-> C /からソースを変更せずに、コンパイルにマクロ定義を追加できます。 C++->プリプロセス->プリプロセッサの定義

于 2011-02-13T11:34:24.520 に答える