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