其實不論什麼方法,歸根揭底都是通過傳遞物件的指標來達到效果的。
方法一:
procedure sendstring(strmsg: string);
vardata: tagcopydatastruct;
pbuf: pchar;
begin
getmem(pbuf, length(strmsg) + 1);
tryzeromemory(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;
procedure wmcopydata(var msg: tmessage); message wm_copydata;
procedure tform1.wmcopydata(var msg: tmessage);
vardata : ^tagcopydatastruct;
strmsg: string;
begin
data:= pointer(msg.lparam);
strmsg:= strpas(data.lpdata);
showmessage(strmsg);
end;
方法二:
tmyrecord=record s:string; end;
tt:tmyrecord;
var tt:tmyrecord; begin tt.s:='s2343243'; postmessage(handle,wm_my,integer(tt),5); end;
傳送訊息,由於引數只能是乙個integer,你這樣發只能發4個位元組,所以要改成發指標,比如:
var tt:tmyrecord; begin tt.s:='s2343243'; postmessage(handle,wm_my,integer(@tt),5); end;
接收的時候當然也不能用原來的方法:my:=tmyrecord(msg.wparam);這樣取回來了,也要把tmyrecord宣告成指標:
type pmyrecord=^tmyrecord; var my:pmyrecord; my:=pmyrecord(msg.wparam);
Delphi窗體間傳送訊息或字串
自定義過程 函式方法 傳送字串到指字句柄的視窗中 接收窗體需用傳送時的訊息常量wm copydata procedure sendmessagedata ahandle thandle astr string varsdata tcopydatastruct begin sdata.cbdata l...
webservice傳送字串
假設只是傳送乙個字串client,這是很easy,只需要輸入xfire包,編寫介面,編寫的實現方法。變化。假設你要傳輸的陣列或自定義類。到用於介面準備的需要agexis檔案。更複雜。嘗試傳輸這些假設沒有成功。在傳送成功的字串,能寫自己的xml檔案。讓client接受並解析。介面類示範例如以下 pac...
ORACLE in 字串,字串,字串
因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...