在MSVC(特别是2010版)中编写DLL时,我遇到了一个小问题。 我的程序由主要部分和DLL组成。 DLL包含一个
的函数__declspec(dllexport) int test_function(void) {
return 42;
}
使用DLL项目编译文件(不使用预编译的头文件,我选择了一个空的DLL项目)。现在,当我想使用dumpbin
工具列出导出的符号时,test_function
未列在导出下。是否有特定设置强制__declspec(dllexport)
实际导出符号?
欢迎任何帮助。谢谢!
答案 0 :(得分:1)
应该这样做。如果这是整个代码,请检查以下内容:
1)您实际上正在检查正确的dll。看一下时间戳。仔细检查位置和名称。
2)你正在编译指定的cpp(我认为你的定义是在cpp文件中)。仅仅因为文件在目录中并不意味着它被编译,所以确保它被添加到项目中。
3)确保预编程器指令不会从编译单元中排除函数。
还要查找其他符号,并尝试查看导出的符号与函数之间的差异。
如果此操作失败,您应将__declspec(dllexport)
移至.h
文件,将定义(不__declspec(dllexport)
)移至.cpp
。它可能无法导出,因为编译器可能会尝试通过内联来优化它。