EXE调用DLL中的回调函数,该怎么处理
EXE调用DLL中的回调函数
首先描述一下我想要的功能:在dll里创建了一个Form,放了一个ClienSocket,通过Onread事件如果接受到服务端发来的信息,则把信息交给调用此dll的exe程序去处理,想用回调函数实现,如下:
===========================================DLL=================================================
Form的CPP文件里面
clientSocket的OnRead事件
接口函数如下:
=================================EXE====================================================
动态调用dll,首先定义了处理函数如下:
调用dll的接口函数如下(在构造函数里):
------解决方案--------------------
查看一下huidiao时tempSendCmdToMain是否为NULL
------解决方案--------------------
SendCmdToMain函数指针需要持久化。有简单的示例工程么,压缩一下发过来,我帮你调试。cbfans#163.com
首先描述一下我想要的功能:在dll里创建了一个Form,放了一个ClienSocket,通过Onread事件如果接受到服务端发来的信息,则把信息交给调用此dll的exe程序去处理,想用回调函数实现,如下:
===========================================DLL=================================================
Form的CPP文件里面
- C/C++ code
typedef void(CALLBack *chbSendCmdToMain)(AnsiString asCmd); chbSendCmdToMain SendCmdToMain;
clientSocket的OnRead事件
- C/C++ code
if(SendCmdToMain) { SendCmdToMain(ClientSocket->Socket->ReceiveText()); }
接口函数如下:
- C/C++ code
void __stdcall huidiao(chbSendCmdToMain tempSendCmdToMain) { SendCmdToMain = tempSendCmdToMain; }
=================================EXE====================================================
动态调用dll,首先定义了处理函数如下:
- C/C++ code
void __stdcall diaoyong(AnsiString asCmd) { //do sth }
调用dll的接口函数如下(在构造函数里):
- C/C++ code
Hdl = LoadLibrary(...);//...省略了 void(__stdcall huidiao)(chbSendCmdToMain ) (FARPROC &)huidiao = GetProcAddress(Hdl, "huidiao") huidiao(diaoyong);
------解决方案--------------------
查看一下huidiao时tempSendCmdToMain是否为NULL
------解决方案--------------------
SendCmdToMain函数指针需要持久化。有简单的示例工程么,压缩一下发过来,我帮你调试。cbfans#163.com