给定两个应用程序A和B,B需要以同步方式从A获取值。
换句话说,以对象模型为灵感,应用程序B想要做某种myVar = A.getValue()
并在其余代码中使用myVar继续执行。
我拥有应用程序A主要表单的句柄,我知道如何使用SendMessage()
向其发送消息。此函数等待消息继续,然后返回一个整数,该整数是执行的结果。但我不知道如何使用这种机制,以便B获得一些复杂的数据结构(字符串或数据记录)。
在我看来,使用SendMessage返回值并不是一个好主意,原因很多,所以有没有办法做到这一点?
必须通过Windows消息完成(我已经知道如何通过管道和套接字完成)。
谢谢!
PS:我使用Delphi,但这里没有重要意义,除非你能用Delphi中的例子说明你的答案:)
答案 0 :(得分:1)
消息的返回值是LRESULT
,它是指针大小的值。如果您希望返回的内容符合这样的值,那将是一种干净的方式。否则你需要别的东西。
您说您必须使用Windows消息,并且您要在不同进程之间发送这些消息。鉴于这些限制,只有一个解决方案,即WM_COPYDATA
。这是唯一可以跨进程边界封送自定义数据的Windows消息。
所以程序如下:
WM_COPYDATA
。请注意,当进程A处理原始消息时,WM_COPYDATA
消息从进程A发送到进程B.这意味着在从B到A的原始消息返回之前,进程B接收并处理WM_COPYDATA
。这可能有些令人困惑,但您确实声明要完全使用Windows消息执行此操作。
答案 1 :(得分:0)
这可以通过一个进程执行VirtualAllocEx()以在另一个进程中分配内存,然后使用Read / WriteProcessMemory在那里复制数据来完成。