无法从C ++ DLL导出函数

时间:2012-09-13 10:57:59

标签: c++ visual-studio-2008 dll mfc

我需要使用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中显示任何功能。难道我做错了什么?我经常搜索,但仍然没有得出可能发生的结论。

3 个答案:

答案 0 :(得分:1)

听起来你可能没有包含在任何cpp文件中指定导出的头文件。请记住,cpp文件是实际编译的唯一文件。因此,请确保在至少一个cpp文件中包含__declspec(dllexport) void Foo(void);的标头。还要确保您的项目链接器 - >输入设置没有指定“模块定义文件”(def)文件。

在依赖性walker显示实际导出某些内容之前,不要试图链接到DLL。

答案 1 :(得分:0)

Windows默认为cdecl,因此您需要明确表示它在调用者中导出了declspec - 或者将其作为cdecl从DLL导出。

答案 2 :(得分:0)

您还需要从CPP文件中明确导出符号:

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

标头中的规范仅用于客户端(EXE),以及来自服务器(DLL)的链接器提示。