全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1691
推到 Plurk!
推到 Facebook!

函數指標的參數讀取錯誤(D7)

缺席
chenyk
高階會員


發表:14
回覆:94
積分:171
註冊:2002-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-06-06 17:45:24 IP:60.249.xxx.xxx 訂閱
 我參考網路上的範例,練習函數指標,
程式編譯OK,但執行時, sBuf 卻沒有正確傳入函數中,請問是哪寫錯了?

從 BCB 板找到類似的解
http://ktop.no-ip.org/topic.php?TOPIC_ID=57033
__closure
他使用了 __closure 的保留字,Delphi 有嗎?

我的源碼如下:

type
TSampleFunc = procedure(const sBuff: string);
TForm1 = class(TForm)
btn_1: TButton;
procedure btn_1Click(Sender: TObject);
private
procedure TestFunc2(const sBuff: string);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn_1Click(Sender: TObject);
var
sBuf: string;
begin
sBuf := 'Test string';
TSampleFunc( @TForm1.TestFunc2)( sBuf);
end;
procedure TForm1.TestFunc2(const sBuff: string);
begin
ShowMessage( 'this is Func2:' sBuff);
end;
end.
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-06-07 11:59:18 IP:220.130.xxx.xxx 訂閱
method pointer is not the same as function/procedure pointer.
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
chenyk
高階會員


發表:14
回覆:94
積分:171
註冊:2002-07-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-06-07 13:17:39 IP:60.249.xxx.xxx 訂閱
我從這找到解答:
http://blog.csdn.net/procedure1984/article/details/3897155

TSampleFunc = procedure( sBuff: integer);
TSampleFunc( @TestFunc)( sBuf);
其中 TestFunc()不能是物件的函數,所以我的程式必須改成類似事件的用法:

type
TSampleFunc = procedure( sBuff: integer) of object;
TForm1 = class(TForm)
btn_1: TButton;
procedure btn_1Click(Sender: TObject);
private
FTestFunc: TSampleFunc;
procedure TestFunc2( sBuff: integer);
published
property TestFunc: TSampleFunc read FTestFunc write FTestFunc;
...

procedure TForm1.btn_1Click(Sender: TObject);
var
sBuf: integer;
begin
sBuf := 123;
TestFunc := TestFunc2;
TestFunc( sBuf);
end;

這樣做可以正常呼叫物件裡的函數。
編輯記錄
chenyk 重新編輯於 2013-06-07 13:28:51, 註解 無‧
chenyk 重新編輯於 2013-06-07 13:29:32, 註解 無‧
系統時間:2017-11-18 19:52:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!