新手求助:主应用程序调用dll回调函数问题

glin2010 2012-02-11 11:56:29
编译主程序时,老是报错:
cannot convert 'int (* (_closure )()()' to 'int(*)()'
type mismatch in parameter 1 (wanted 'int(*)()',got 'void')
请问各位大大,这到底是什么原因啊

//主应用程序
HINSTANCE ins;
ins = LoadLibrary("./dll/dllTalk.dll");
try
{
if(ins == NULL)
throw MyException("Can't Load Library!");

FARPROC lpFarProc; //回调函数未成功
lpFarProc = GetProcAddress(ins,"call");
if(lpFarProc == NULL)
{
FreeLibrary(ins);
throw MyException("Can't Get dd Address!");
}
typedef int (*pfv)();

typedef void (* pt)(pfv);
pt aFunc = (pt)lpFarProc;
aFunc(test1); //出错在这里
if(!FreeLibrary(ins))
{
throw MyException("Can't Free!");
}
}
catch (MyException &myException)
{
ShowMessage(myException.test);
}
………………
int test1()
{
return 0;
}

//dll程序
extern "C" __declspec(dllexport) void __stdcall call(int (*CallBack)())
{
CallBack();
}


...全文
125 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2012-02-13
  • 打赏
  • 举报
回复
你的DLL中的窗口不会是ShowModal出来的吧。
glin2010 2012-02-12
  • 打赏
  • 举报
回复
to 妖哥,还是你猛
把test1拿出来就ok了,多谢大大
glin2010 2012-02-12
  • 打赏
  • 举报
回复
是定义成类成员函数了哦,要怎么改啊
ccrun.com 2012-02-12
  • 打赏
  • 举报
回复
你的test1不会是类成员函数吧。
glin2010 2012-02-12
  • 打赏
  • 举报
回复
to 妖哥
少了一个错误了
现在还是报cannot cast from 'int (* (_closure )())()' to 'void (*)(int (*)())'
搞不懂了,我把pt换成pfv,也报错
ccrun.com 2012-02-12
  • 打赏
  • 举报
回复
aFunc((pt)&test1);
glin2010 2012-02-12
  • 打赏
  • 举报
回复
妖哥,为什么动态调用dll时,dll的窗口被创建之后,主应用程序的窗口就变成非活动的了,而且怎么点都不变成活动窗口,非要把dll的窗口关掉才能让主应用程序的窗口变成当前窗口,这是什么原因啊。

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧