动态库中回调函数如何使用~急急急~在线等
这是原型
typedef void(CALLBACK* vOnDeviceLogin)(int Dev_id,TSerialType Serial,char* ip,int port,int & heartbeat);
我的头文件中定义如下
void __stdcall(CALLBACK*)(int ,TSerialType ,char* ,int ,int );
加载动态库的代码如下:
vOnDeviceLogin = (void __stdcall(CALLBACK*)(int ,TSerialType ,char* ,int ,int ))::GetProcAddress(Hdl,"vOnDeviceLogin");
这样一直加载不进来,请教大大,动态库中的回调函数。怎么调用,急急急,在线等
[解决办法]
首先确认一下DLL导出的函数名,到底是不是vOnDeviceLogin,然后:
typedef void (CALLBACK *VONDEVICELOGIN)(int, TSerialType, char *, int , int &);HINSTANCE hLib = ::LoadLibrary(TEXT("dll文件名"));if (hLib){ VONDEVICELOGIN vOnDeviceLogin = (VONDEVICELOGIN) ::GetProcAddress(hLib, "vOnDeviceLogin"); if (vOnDeviceLogin) { vOnDeviceLogin(参数....); } ::FreeLibrary(hLib);}
[解决办法]
帮解决问题,可不是代工!
写代码,主要还是靠自己!
[解决办法]
动态库是用什么开发工具写的? 如果是用C++Builder写的,函数名前缺省会加个_, 代码中要导出的函数名为vOnDeviceLogin,那dll中函数名会变成 _vOnDeviceLogin
建议用动态库查看工具Dependency Walker看了下dll的导出函数.
[解决办法]
加修饰 extern "C" __stdcall
导出函数就不会有“_”