如题,DLL是一个钩子程序,我要把它加载到一个现有的程序中,在钩子里的回调函数中的实现部分,可以用主程序中的一个函数来实现.所以我想知道怎么在DLL中调用主程序的函数.
解决方案 »
- 装了双系统,编译的程序带了安全证书,如何去掉
- 问个关于异步提交的问题
- 为什么select函数返回的总是1?
- DataGrid控件如何更新
- SDK看的有点晕
- 为本什么程序老说某某内存为只读?
- 窗口刷新问题
- 如何将 GMT 时间字符串转换成 time 类型或 SYSTEMTIME 结构
- vc2008 ATL OLEDB Custumer(使用者)模板使用后,读取数据库内容正常,如何更改(删除)数据库表格内容+++++++++++++++++++
- "大本营离线浏览器" 是不是在合定本带的光盘里?
- 请问这个UNICODE(无下划线)和_UNICODE(有下划线)到底有什么区别!!!!???
- 超难!!!再次提问ATL事件向外界(VB)传递safearray参数问题。
然后导出这个函数
在 dll 中 实现 调用这个函数指针就可以了,不过这个函数指针必须是全局或者静态的函数否则如果是一个成员函数则需要 在 ecx把 this 指针 传入
以上。
一点儿看法。
主程序内:
bool fa(){};Dll:
typedef bool (*PF)();
PF g_pfa;
void Init(PF pf){g_pfa = pf;}//该函数为导出函数
当加载dll时,主程序调用Init(fa);则之后Dll中就可以用g_pfa()来执行了.
晚上没来没想到有这么多的回贴,谢谢大家啦,我的QQ是:29700048.希望大家加我,帮助我解决这个问题,这几天愁坏我了.
PostMessage
SendMessage
如果主程序中没有消息循环呢??
2、dll需要暴露一个参数为函数指针的、用以设置该函数指针变量的函数SetFunc
3、exe将自己的函数ExeFunc作为参数调用dll的SetFunc(ExeFunc)函数
4、dll用ExeFunc指针赋值给DllFunc
5、dll使用该DllFunc函数
2. ON_REGISTERED_MESSAGE(WM_MYMESSAGE , OnMyMsg)//加入到消息处理文件中, 再加入一个消息处理函数OnMyMsg 你就可以了。而在DLL中,你要做的就是LRESULT lResult = ::SendMessage(hWnd, WM_MYMESSAGE, wParam, lParam);其中hWnd 为程序主窗口的句柄,想办法得到它。
//全局钩子,DLL中的捕捉POST消息的回调函数
LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{ PMSG pmsg = (PMSG)lParam; switch(pmsg->message)
{
case(0x1789):
PostMessage(HWND_BROADCAST,WM_TIMER,4,0);
break;
case(0x178C):
PostMessage(HWND_BROADCAST,WM_USER+1001,0,0);
break;
}
return CallNextHookEx(hkb, nCode, wParam, lParam);}
现在的问题是PostMessage(HWND_BROADCAST,WM_TIMER,4,0);主程序收到了,并响应了这个消息,但是 PostMessage(HWND_BROADCAST,WM_USER+1001,0,0);却没有响应.