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;
  • 相关阅读:
    KNN算法--物以类聚,人以群分
    朴素贝叶斯算法原理
    17.Letter Combinations of a Phone Number
    103.Binary Tree Zigzag Level Order Traversal
    65、使用互斥锁唤醒指定线程
    64、线程之间的通信
    63、使用Timer类来实现定时任务
    62、单例模式
    61.volatile关键字
    60、死锁
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254609.html
Copyright © 2011-2022 走看看