无法从C++DLL导出函数

Unable to export functions from C++ DLL

本文关键字:函数 C++DLL      更新时间:2023-10-16

我需要使用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("Barn");
    return;
}

它成功编译并生成DLL,但当我尝试使用它时,我总是得到:"错误LNK2019:未解析的外部符号"void __cdecl Foo(void)"

我尝试使用依赖性Walker,但它在DLL中没有显示任何函数。我做错什么了吗?我搜索了很多,但仍然没有从可能发生的事情中得出结论。

听起来您可能没有在任何cpp文件中包含指定导出的头文件。请记住,cpp文件是唯一实际编译的文件。所以,请确保在至少一个cpp文件中包含带有__declspec(dllexport) void Foo(void);的标头。还要确保您的项目Linker->Input设置没有指定"模块定义文件"(def)文件。

在依赖性助行器显示某个东西实际上已导出之前,不要费力地尝试链接到DLL。

Windows默认为cdecl,因此您需要明确在调用程序中导出declspec,或者将其从DLL中导出为cdecl。

您需要从CPP文件显式导出符号:

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

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