1

Visual Studio 2008 を使用して C++ MFC DLL を作成する必要があります。これを行うには、Visual Studio で DLL MFC Win32 コンソール プロジェクトを作成し、オブジェクトを作成し、そのメソッドを使用して文字列を画面に出力する関数を作成しました。このような種類:

__declspec(dllexport) void Foo(void);

どこ:

    void Foo(void){
    print* obj = new print;
    obj->testPrint();
    return;
}

void print::testPrint(void){
    printf("Bar\n");
    return;
}

正常にコンパイルされ、DLL が生成されますが、使用しようとすると、常に「エラー LNK2019: 未解決の外部シンボル "void __cdecl Foo(void)"」が表示されます。

Dependency Walker を使用してみましたが、DLL に関数が表示されません。私は何か間違ったことをしていますか?私は多くのことを検索しましたが、何が起こっているのかについての結論はまだ得られていません。

4

3 に答える 3

1

エクスポートを指定するヘッダー ファイルを cpp ファイルに含めていないようです。cpp ファイルだけが実際にコンパイルされることに注意してください。__declspec(dllexport) void Foo(void);そのため、少なくとも 1 つの cpp ファイルにヘッダーを含めるようにしてください。また、プロジェクトの [Linker] -> [Input] 設定で、'Module Definition File' (def) ファイルが指定されていないことを確認してください。

依存関係ウォーカーが何かが実際にエクスポートされたことを示すまで、わざわざ DLL にリンクしようとしないでください。

于 2012-09-13T20:03:36.293 に答える
0

Windows のデフォルトは cdecl であるため、呼び出し側で declspec をエクスポートすることを明示するか、代わりに DLL から cdecl としてエクスポートする必要があります。

于 2012-09-13T12:18:22.213 に答える
0

また、CPP ファイルからシンボルを明示的にエクスポートする必要があります。

__declspec(dllexport)
void Foo(void)
{ 
    print* obj = new print; 
    obj->testPrint(); 
    return; 
} 

ヘッダーの指定は、クライアント (EXE) に対するものであり、サーバー (DLL) からのリンカに対するヒントです。

于 2012-09-13T15:47:45.993 に答える