我已将DLL文件注入另一个进程,我希望通过外部EXE与它通信。如何与注入的DLL进行通信? :/
答案 0 :(得分:3)
如果我已正确理解您的问题,您已向进程注入了一个DLL,并希望通过某些外部EXE与它进行通信。您可以在此处使用IPC(进程间通信)的标准方法。我知道链接不应该单独发布,但是Windows上的IPC是一个过于宽泛的主题,无需复制和粘贴链接文章,无法全面覆盖。
我做了与您在此处尝试的相同的事情,并通过named piping使用data copying和WM_COPYDATA进行了IPC。但是,我使用每种形式的IPC都有一个特殊的原因,所以我们确实需要在推荐单一形式之前从您的问题域中了解更多。
您正在做的事情是,您在已经转换为LPTHREAD_START_ROUTINE的函数上调用CreateThread,这意味着它应该指向ThreadProc回调。您当前的void WINAPI ()
签名与所需的DWORD WINAPI (LPVOID)
不符。
如果您需要做的所有DLL都是转发消息,则可以将其作为消息的代理。
但是,如果这就是你需要做的全部,那么根本不需要在中间有一个DLL。这就是为什么我说我们需要有关您的问题域的更多信息。
如果您尝试以可执行文件的形式提供注入DLL的内容,然后与DLL进行通信并且DLL进行回传,您可能需要查看我工作的project一段时间以前。这正是如此。
答案 1 :(得分:1)
您需要在EXE和注入DLL的应用程序之间进行通信。
因此,在您的DLL中,您需要等待来自EXE的某种通信的spawn a thread。您不能等待DllMain中的事件,因为这会使应用程序死锁。
一种简单的方法是创建named event和wait for it to be set in your DLL。然后在外部EXE中,当您点击按钮时,您set the event。