① 当DLL使用为C++为源文件时,导出的函数需要在头文件上添加:
extern "C"
{
//导出函数声明......
};
② 用上面方法仍不能被外部函数所识别的( 带有XXX@数字的),用下面方法:
设一个需要导出的函数为:
LRESULT CALLBACK KeyboardProc (INT nCode,
WPARAM wParam, //存放着VK值
LPARAM lParam //存放着重复次数、扫描码、扩展....
);
则:
//
// 强制导出函数:_KeyboardProc@12 的别名为:KeyboardProc
// 规则是前面加 【__函数名@参数字节数】,具体可以使用
// Dependency Walker工具查看被修改了的名字
//
#pragma comment(linker, "/export:KeyboardProc=_KeyboardProc@12")
//
// 为外部C语言的留出一个标准的导出函数接口
extern "C"
{
//导出函数
DLLTEST_API LRESULT CALLBACK KeyboardProc (INT nCode,
WPARAM wParam, //存放着VK值
LPARAM lParam //存放着重复次数、扫描码、扩展....
);
};
上面的DLLTEST_API定义为:
#define DLLTEST_API __declspec(dllexport)
如上处理后,导出函数名为:KeyboardProc;如上面注释中描述的,DLL中的导出函数,应该经常用VC工具 DependencyWalker 查看!
本文详细介绍了如何在C++ DLL中正确地导出函数,并针对带有特定签名的函数提供了具体的解决办法。文中还介绍了如何使用DependencyWalker工具来检查DLL中的函数名称变化。

6942

被折叠的 条评论
为什么被折叠?



