ss[1]//var ss:String; 和 Pointer(ss)^ 是不是一个意思呢? 答:不是。 ss[1]表示第一个字符。如:ss:='abc' 则表示'a'。ss[0]=Length(ss); Pointer(ss)^ 和 @s 也不一样。 就连 cc:PChar Pointer(cc)^ 和 @cc 也不一样。 应用: 一、发送字符串 或者 Record procedure SendStr(ss:String); var cds:TCopyDataStruct;hh:HWND; begin hh:=FindWindow('TfrmFYErpMsg',nil); if hh<>0 then begin //cds.dwData:=Handle;可要可不要 cds.cbData:=Length(ss)+1;//不能漏掉+1 cds.lpData:=AllocMem(cds.cbData);//GetMem(cds.lpData,cds.cbData);可替代 StrCopy(cds.lpData,PChar(ss)); SendMessage(hh,WM_COPYDATA,hh,Cardinal(@cds)); FreeMem(cds.lpData); end; end; TRR=Record a:String[20]; b:PChar;//这里注意,不能使用PChar这种长度可变的。 d:Double; end; procedure SendRec(aa:TRR); var cds:TCopyDataStruct;hh:HWND; begin hh:=FindWindow('TfrmFYErpMsg',nil); if hh<>0 then begin cds.cbData:=sizeof(aa); // cds.lpData:=AllocMem(cds.cbData);//GetMem(cds.lpData,cds.cbData); cds.lpData:=@aa; SendMessage(hh,WM_COPYDATA,hh,Cardinal(@cds)); // FreeMem(cds.lpData);不知道怎么要这个??? end; end; 二、接收 procedure RecordWM(var ARec:TWMCopyData);message WM_COPYDATA; procedure TfrmFYErpMsg.RecordWM(var ARec: TWMCopyData); var s:String;x:TRR; begin //字符串 s:=StrPas(ARec.CopyDataStruct^.lpData); //Record x:=TRR(ARec.CopyDataStruct.lpData^); s:=x.a+#9+x.b+#9+FloatToStr(x.d); end;