首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

EXE调用DLL中的回调函数解决方案

2013-01-05 
EXE调用DLL中的回调函数首先描述一下我想要的功能:在dll里创建了一个Form,放了一个ClienSocket,通过Onread

EXE调用DLL中的回调函数
首先描述一下我想要的功能:在dll里创建了一个Form,放了一个ClienSocket,通过Onread事件如果接受到服务端发来的信息,则把信息交给调用此dll的exe程序去处理,想用回调函数实现,如下:
===========================================DLL=================================================
Form的CPP文件里面


typedef void(CALLBack *chbSendCmdToMain)(AnsiString asCmd);
chbSendCmdToMain SendCmdToMain;

clientSocket的OnRead事件

if(SendCmdToMain)
{
    SendCmdToMain(ClientSocket->Socket->ReceiveText());
}

接口函数如下:

void __stdcall huidiao(chbSendCmdToMain tempSendCmdToMain)
{
    SendCmdToMain = tempSendCmdToMain;
}


=================================EXE====================================================
动态调用dll,首先定义了处理函数如下:

void __stdcall diaoyong(AnsiString asCmd)
{
    //do sth
}

调用dll的接口函数如下(在构造函数里):

Hdl = LoadLibrary(...);//...省略了
void(__stdcall huidiao)(chbSendCmdToMain )
(FARPROC &)huidiao = GetProcAddress(Hdl, "huidiao")
huidiao(diaoyong);

[解决办法]
查看一下huidiao时tempSendCmdToMain是否为NULL
[解决办法]
SendCmdToMain函数指针需要持久化。有简单的示例工程么,压缩一下发过来,我帮你调试。cbfans#163.com

热点排行