我有一个程序,使用了全局钩子,因此要使用一个DLL和一个EXE。我想在DLL中向EXE报告它运行的情况,可是我不知道如何做。
因为应用程序没有窗口,所以如果使用自定义消息,我不知道消息发向哪里。
在DLL中开辟一个内存存放信息也不好,因为应用程序不可能总是去查询这段内存。其他的我就想不到了,各位有什么好的方法?
因为应用程序没有窗口,所以如果使用自定义消息,我不知道消息发向哪里。
在DLL中开辟一个内存存放信息也不好,因为应用程序不可能总是去查询这段内存。其他的我就想不到了,各位有什么好的方法?
如果是这种情况,就可以把它当作一个窗口显示的程序去做。
如:
在DLL中定义一个为DLL中全局变量HWND dllWnd附值的函数,当你用LoadLibrary加载时,首先调用这个函数,把主程序的m_hWnd传入Dll中,当动态连结库里需要发送消息到主程序时::SendMessage(dllWnd,....),这种办法我试过,可以成功的。如果是Service的话,如果想作到事件响应的话,就只能用连接点了。
关于连接点的实现自己查查COM吧,比较复杂.
你的DLL就是生产者,你的EXE是消费者。
这样你需要通过信号量来控制它们之间的数据传递。============================================================================
DocWizard C++ 程序文档生成工具 http://www.betajin.com/alphasun/index.htm
另一个方法是回调函数。回调函数有几种方式:
1、使用QueueUserAPC函数。这需要给出一个线程句柄而不是ID,并且该线程必须在适当的时候进入警戒模式(通过调用SleepEx等函数),回调函数才能得到执行。
2、使用QueueUserWorkItem函数。这会使系统创建一个线程池,在线程池中执行所需的回调函数。除此之外,还可以使用PostQueuedCompletionStatus函数向一个完成端口添加一条完成消息。还可以利用Event同步对象,并提供用于查询的引出函数。当状态发生变化的时候,将Event对象置位传信状态,然后EXE就可以调用函数去查询状态了。
让EXE传给DLL一个函数指针,
DLL愿意的时候就调用这个函数。最方便最省事。
等我回去把问题解决了,明天来给分。谁还有更好的方法,也来说说呀。
PAPCFUNC是怎样的定义,我没找到。
能给个简单的例子吗?