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);在至少一个 cpp 文件中包含标题。还要确保您的项目链接器->输入设置没有指定“模块定义文件”(def)文件。

不要费心去尝试链接到 DLL,直到依赖walker 显示某些东西已经被实际导出了。

于 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 回答