Pointer傳輸 |
尚未結案
|
kkccgg
初階會員 發表:50 回覆:54 積分:30 註冊:2002-07-28 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
可以的
type Test = record X, Y: Single; end; pTest = ^Test; 使用時 var ptExample:pTest; begin New(ptExample); ptExample^.X:=100; ptExample^.Y:=100; testProcedure(ptExample); ... dispose(ptExample); end; Procedure testProcedure(ptEx:ptTest); var x,y:Single; begin x:=ptEx^.X; y:=ptEx^.Y; ptEx^.X:=0; ptEx^.Y:=0; end;發表人 - chris_shieh 於 2004/12/17 11:57:28 |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
kkccgg
初階會員 發表:50 回覆:54 積分:30 註冊:2002-07-28 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
Procedure testProcedure(userdata:Point);
我想這應該要看你Point 型態的定義為何才能決定吧
Point 也是Pointer型態嗎 那就是 var originPt:Point; begin new(originPt); //參考我前面的post 可以指定 originPt的值 testProcedure(originPt); ... ... dispose(originPt); end; 如果你的Point 型態是跟 TPoint 有關的話 (應該不是吧) 那就是 > 發表人 - |
kkccgg
初階會員 發表:50 回覆:54 積分:30 註冊:2002-07-28 發送簡訊給我 |
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type Test = record X, Y: Single; end; pTest = ^Test; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public ptEx:pTest; function test(UserData: Pointer = nil): Cardinal; { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.test(UserData: Pointer = nil): Cardinal; var ptLocal:pTest; begin ptLocal:=pTest(UserData); //Type casting to pTest Showmessage(FloatToStr(ptLocal^.X)); Showmessage(FloatToStr(ptLocal^.Y)); ptLocal.X:=ptLocal.X*10; //update value ptLocal.Y:=ptLocal.Y*10; //update value end; procedure TForm1.FormCreate(Sender: TObject); begin new(ptEx); ptEx.X:=10; ptEx.Y:=20; test(ptEx); Showmessage(FloatToStr(ptEx^.X)); //show updated value Showmessage(FloatToStr(ptEx^.Y)); //show updated value dispose(ptEx); end; end. |
kkccgg
初階會員 發表:50 回覆:54 積分:30 註冊:2002-07-28 發送簡訊給我 |
很抱歉,表達有點錯誤
1.我是用由別人開發的物件,故無法修改函式內的程式
2.原件動作步驟如下
function test(UserData: Pointer = nil): Cardinal;
當下了該行函數後,在某狀態會觸發事件,而是件內包含以下資料
TTransactionInfo = record
ID: Cardinal;
UserData: Pointer;
end; 而UserData會引用test傳入Pointer
該項解說是
UserData is a pointer to user-defined data that was supplied by the application to a previous call to one of the transaction initiation methods.
那UserData: Pointer;可以傳type嗎. 謝謝 謝謝
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
UserData is a pointer to user-defined data that was supplied by the application to a previous call to one of the transaction initiation methods.
所以 UserData 應該是您呼叫 transaction initiation methods 而可以得到的吧 function test 還是要傳Pointer , 不管是typed or untyped
我想test function 內應該自己會作處理 根據Delphi Online Help:
Addr function
......
The result of Addr is of the predefined type Pointer, which means that it is assignment-compatible with all pointer types but can't be dereferenced directly without a typecast. 不過我想你應該要先瞭解test function所需要的 UserData 真正的型態定義才能給一個正確的UserData, 也才能正確宣告UserData
var UserData:Pointer; begin UserData:=Get_From_TransInit_Method; //如果傳回的也是Pointer test(UserData); end;發表人 - chris_shieh 於 2004/12/20 17:36:48 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |