我已经搜索了谷歌和整个网站,看起来我正在做的事与我读过的内容相符。我正在使用VS 2010 C ++ Express。当我在DLL上调用dumpbin / exports时,我没有看到列出的任何函数。
以下是我的DLL代码中唯一的内容。我是否需要C ++中的任何特殊标题?
C ++头文件:
extern "C"
{
__declspec(dllexport) int __cdecl AddOne(int start);
}
C ++ CPP文件:
extern int __cdecl AddOne(int start)
{
return start + 1;
}
我错过了一些明显的东西吗?该函数是否必须在命名空间或静态类或任何东西?我现在只想尝试基础知识。
答案 0 :(得分:6)
我没有看到代码中的错误。外部" C"和__cdecl并不重要。它们控制如何为链接器修饰入口点。他们不控制 if 它应该从您的DLL或可执行文件导出。顺便说一句.EXE可以像任何其他DLL一样导出入口点。 DLL可以像调用任何其他DLL一样调用驻留在.EXE中的函数。
关键元素是__declspec(dllexport)。这似乎是正确的。
检查您的标头是否真的包含在您的cpp文件中,并尝试在项目的属性页中使用各种选项的变体。
答案 1 :(得分:0)
如果您认为未导出,请尝试dependency walker和CFF Explorer查看生成的dll中的符号。在MSDN您可以找到有关如何导出的更多信息