两个程序之间传递数据可以使用wm_copydata

原创 2005年03月03日 11:26:00
下面是我的回答:
var
dt: TYourStruct;

procedure Txxxx.WMCopyData(var Message: TWMCopyData);
var
p: PChar;
begin
p :=Message.lpData;
Move(p^, dt.a, SizeOf(Integer));
Inc(p, SizeOf(Integer));
Move(p^, dt.b, SizeOf(Integer));
Inc(p, SizeOf(Integer));
GetMem(dt.pFileStr, StrLen(p) + 1);
Move(p^, dt.pFileStr^, StrLen(p) + 1);
end;



来自:jame, 时间:2000-9-25 20:41:00, ID:348950
public
 procedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

{ TForm2 }

procedure TForm2.Mymessage(var t: TWmCopyData);
begin
 Edit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 ds: TCopyDataStruct;
 hd: THandle;
begin
 ds.cbData := Length(Edit1.Text) + 1;
 GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存
 StrCopy(ds.lpData, PChar(Edit1.Text));
 Hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄
 if Hd <> 0 then
SendMessage(Hd, WM_COPYDATA, Handle,
 Cardinal(@ds)) // 发送WM_COPYDATA消息
 else
ShowMessage('目标窗口没找到!');
 FreeMem(ds.lpData); //释放资源
end;


下面是共享内存法
unit ccc;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI, StdCtrls, Buttons;

const
WM_BARICON=WM_USER+200;

type
TForm1 = class(TForm)
btnwrite: TBitBtn;
btnread: TBitBtn;
Editwrite: TEdit;
Editread: TEdit;
procedure FormCreate(Sender: TObject);
procedure btnwriteClick(Sender: TObject);
procedure btnreadClick(Sender: TObject);
private
hMapfile&: THandle;
MapFilePointer: Pointer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
hMapFile := CreateFileMapping (
$FFFFFFFF, // 特殊内存映射句柄
nil, page_ReadWrite, 0,10000,
'DdhDemoMappedFile'); // 文件名
if hMapFile <> 0 then
MapFilePointer := MapViewOfFile (
hMapFile, // 上面映象文件的句柄
File_Map_All_Access,
0, 0, 0) // 访问整个映象文件
else
ShowMessage ('hMapFile = 0');
if MapFilePointer = nil then
ShowMessage ('MapFilePointer = nil');
end;

procedure TForm1.BtnWriteClick(Sender: TObject);
begin
StrCopy (PChar (MapFilePointer),
PChar (EditWrite.Text));//把内容写入共享内存
end;

procedure TForm1.BtnReadClick(Sender: TObject);
var
S: string;
begin
S := PChar (MapFilePointer);//从共享内存读出内容
EditRead.Text := S;
end;



end.

MFC copydata实现两个进程间信息传递。

1.新建Send基于对话框工程。添加按钮,标题改为“发送”。 2.找到对话框头文件,定义结构体。 typedef struct{ char Name[20]; UINT Age; }Stude...

用WM_COPYDATA消息来实现两个进程之间传递数据

文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有...

用WM_COPYDATA消息来实现两个进程之间传递数据

进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有   使用内存映射文件   通过共享内存DLL共享内存   使用SendMessa...
  • mail_cm
  • mail_cm
  • 2012年08月24日 10:34
  • 1845

WM_COPYDATA两个对话框之间传递数据的乱码问题

typedef struct tagCOPYDATASTRUCT{      DWORD dwData;//用户定义数据      DWORD cbData;//数据大小      PVOID ...

C#和C++之间通过WM_COPYDATA相互传递数据结构

C#和C++之间通过WM_COPYDATA相互传递数据结构  前言:今天真心忍不住要写这篇博客了,原因很简单,前几天在做这方面的通信,调试了好久,各种bug,也是第一次在C#和C++之间通过SendM...

进程之间通讯:M_COPYDATA消息来实现两个进程之间传递数据.

文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有 使...
  • educast
  • educast
  • 2013年09月01日 13:10
  • 997

使用WM_COPYDATA消息在C++和C#程序之间互传数据

【网通】点击此处下载源程序                         【电信、网通】点击此处下载源程序 【网通】点击此处下载演示程序                     【电信、网通】点击...

进程间通过WM_COPYDATA传递数据

前段时间,开发中涉及到在两个进程之间传递字符串的问题,开始想当然就是简单的自定义一个消息,然后使用lParam和wParam来传递这个字符串,但是始终有问题,老是报越界访问的错误,仔细一想,瞬间感觉自...

VC++ 中WM_COPYDATA 怎么样应用来实现两个进程间的数据传输

本文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有 使用内存...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个程序之间传递数据可以使用wm_copydata
举报原因:
原因补充:

(最多只允许输入30个字)