16位程序如何通过sendmessage向32位程序传送字符串。(100分)

  • 主题发起人 主题发起人 chenke
  • 开始时间 开始时间
C

chenke

Unregistered / Unconfirmed
GUEST, unregistred user!
把lparam作为字符串指针。
 
哈哈,因为不同的程序拥有不同的地址空间,用指针的方法肯定不行的啦。<br>不如这样:<br>建立一个“桥”<br><br>16位程序中响应一个自定义消息,<br>接受一个字符串指针,逐个取出字符,用另一个自定义消息发送给<br>32位程序,32位程序中的该消息处理程序逐个收集字符,等收到<br>结束符之后,使用一个自定义消息把字符串指针用消息发送给自己<br>程序的另一个处理过程<br><br>这样,通过桥,对于桥的使用者来说,就能够简便地通过消息将字<br>符串在不同的应用程序之间传递。
 
16 to 32 is same. 32 to 16 may cause problems.
 
use WM_COPYDATA
 
共享内存!
 
16 to 16位直接用lparam拷贝字符串没有问题,<br>WM_CopyData是win32函数,31没有,<br>如何共享内存?
 
CreateFileMapping不过也是win32的!<br>你用lparam传递字符得了!自定义消息!
 
不行,我正是这么做的。
 
to huizhang:16 to 32 is error.<br>such as:<br>16:<br>var str:array[0..10] of char;<br>&nbsp; &nbsp; pstr:Pchar;<br>pstr:=@str;<br>strcopy(pstr,'test');<br>sendmessage(Findwindow(nil,'32'),wm_user+10,1,Longint(pstr));<br>32:<br>on receive message:<br>var z:string;<br>z:=strpas(Pchar(message.Lparam));//it's error,accessvoliat..<br><br>how to do?<br>
 
这样传地址当然不行!win95里每一个程序有自己的代码段!用地址无效!<br>我的意思是<br>for i=1 to len(pstr) do<br>sendmessage(Findwindow(nil,'32'),wm_user+10,1,Longint(pstr));<br>传到/0是32知道结素!
 
用debug Api行不行?<br>用过virtualprotect,readprocessmemory等等,不知地址如何转换,<br>读出来的数据总是不对.
 
用MapViewfileEx行不行,把基址设为LParam.
 
用DDE方式,用PackDDElParam和UnpackDDElParam实现16位和32位句柄<br>的转换,或用原子传送,绝对没问题,我做过了,呵呵。Goodluck.
 
chenke,如果您觉得已经获得了问题的答案,请结束问题,<br>如果您觉得问题尚未解决,请附上您的看法。
 
dde 可能也有问题,OLE呢?呵呵,估计过分了点<br>沉疴啊,写个文件吧
 
DDE和OLE都过于的麻烦<br>最简单的是剪贴版的数据传输<br>自定义数据类型,应用程序之间<br>发送消息来通信
 
多人接受答案了。
 
后退
顶部