zoukankan      html  css  js  c++  java
  • delphi传递字符串信息 WM_COPYDATA  转

    delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?

    delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?

    必须使用sendMessage.
    sendmessage会等待接受消息完成后才继续执行,这样你的str才会被另一个窗口可靠接收。postmessage传递完消息立即返回,这样接收窗口就不一定完全接收当时传递的str.尤其是在局部变量的情况。

    而进程间的数据传递好像只有用wm_copydata消息,它可以跨进程拷贝内存。

     

     

     

     

    使用WM_COPYDATA传递.

    发送:  

    Delphi(Pascal) code

    procedureSendString(strMSG: string);
    var
       Data: tagCOPYDATASTRUCT;  
       pBuf: PChar;
    begin
     
    GetMem(pBuf, Length(strMSG) +1);  
    try    
         ZeroMemory(pBuf, Length(strMSG) +1);    
         StrPCopy(pBuf, strMSG);    
         Data.cbData:=Length(strMSG);    
          Data.dwData:=Length(strMSG);    
         Data.lpData:=pBuf;    
         SendMessage(hTargetWin, WM_COPYDATA, Integer(Self.Handle), Integer(@Data));  
    finally   
         FreeMem(pBuf);  
    end;
     
    end;



    接收:

    Delphi(Pascal) code

    procedureWMCopyData(varMSG: TMessage); message WM_COPYDATA;
     
    procedureTForm1.WMCopyData(varMSG: TMessage);
    var
       Data  ^tagCOPYDATASTRUCT;  
       strMSG: string;beginData:=Pointer(Msg.lParam);  
        strMSG:=StrPas(Data.lpData);  
        ShowMessage(strMSG);
    end;
  • 相关阅读:
    UVA 12307 Smallest Enclosing Rectangle
    UVALive 4728 Squares
    扩栈代码
    uva 10256 The Great Divide
    uva 11168 Airport
    uva 10625 Board Wrapping
    bzoj千题计划206:bzoj1076: [SCOI2008]奖励关
    NOIP2017 列队
    bzoj3529: [Sdoi2014]数表
    bzoj1966: [Ahoi2005]VIRUS 病毒检测
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254609.html
Copyright © 2011-2022 走看看