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

如果要做一個function裡面再帶一個function有可能嗎?

尚未結案
bigpipi999
一般會員


發表:4
回覆:4
積分:1
註冊:2004-08-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-22 19:14:45 IP:220.130.xxx.xxx 未訂閱
由於使用別人做的DLL來執行相關FUNCTION後會取得一個值 而我會將這值ASSIGN給某一個OBJECT 但因為OBJECT也是透由另外一隻程式傳入的 因此想要用一個FUNCTION來指定傳入的OBJECT及DLL的FUNCTION 也就是在FUNCTION裡的其中一個參數指定為FUNCTION 請問是否有可能這樣去做呢? 或者有其他更好的方法可以完成?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-23 03:09:53 IP:61.71.xxx.xxx 未訂閱
引言: 由於使用別人做的DLL來執行相關FUNCTION後會取得一個值 而我會將這值ASSIGN給某一個OBJECT 但因為OBJECT也是透由另外一隻程式傳入的 因此想要用一個FUNCTION來指定傳入的OBJECT及DLL的FUNCTION 也就是在FUNCTION裡的其中一個參數指定為FUNCTION 請問是否有可能這樣去做呢? 或者有其他更好的方法可以完成?
Function MyFun1(...): [return type]
   Function MyFun2(..):[return type]
   begin
      ....
   end;
   var ....
begin
 ....
end;
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-23 09:00:44 IP:220.135.xxx.xxx 未訂閱
可以ㄚ 你必須先定義function的型態(如果該function 為 class member 請記的在後面加of object) 例如
 Type 
  TMyFuncType= function(P1:Integer;P2:Integer):Integer;      
  procedure Myfunc(aObj:TObject;aFunc:TMyFuncType;);
  var i,j,k:integer;
  begin
    ...
    i := aFunc(j,k);
  end;    
混心雜欲 棄修身~唉
------
唉~
bigpipi999
一般會員


發表:4
回覆:4
積分:1
註冊:2004-08-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-23 15:07:52 IP:220.130.xxx.xxx 未訂閱
我可能說的不夠清楚~~抱歉..我的問題大概像下面這樣 有個CallBack Function,宣告在Libry.pas的單元內 T_Call_Proc = procedure(P: Pointer; Y: Integer); stdcall; : : procedure My_Call(Param: Integer; Proc: T_Call_Proc); stdcall; 主程式include Libry.pas進來後程式大致如下 procedure RefreshCall(p: Pointer; Y: Integer); stdcall; var ...... begin with MyForm.Image1.Picture.Bitmap do begin W_Bits:=Width*3; pS:=pIMG; for H:=0 to Height-1 do begin ...... end; MyForm.Image1.Refresh; end; end; procedure TForm1.Button1Click(Sender: TObject); begin MyImageA:=TImage.Create(Nil); .... My_Call(0,RefreshCall); end procedure TForm1.Button1Click(Sender: TObject); begin MyImageB:=TImage.Create(Nil); .... My_Call(0,RefreshCall); end 我遇到的情況是可能不同的按鈕按下會產生不能的TImage物件 且影像大小,放的位置皆不同 我想把這個TImage的物件傳進RefreshCall裡 但因為這個RefreshCall宣告為CallBack function 帶入的參數跟傳回值我必須要一樣不能變更 且該DLL我沒法子重改~ 這樣我不太清楚如何才有法子 把我想要的物件塞進去~ 請各位高手幫幫忙囉~~~
bigpipi999
一般會員


發表:4
回覆:4
積分:1
註冊:2004-08-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-23 15:22:35 IP:220.130.xxx.xxx 未訂閱
修正一下是下面這樣 不同的Button會建不同的TImage procedure TForm1.Button1Click(Sender: TObject); begin MyImageA:=TImage.Create(Nil); .... My_Call(0,RefreshCall); end procedure TForm1.Button2Click(Sender: TObject); begin MyImageB:=TImage.Create(Nil); .... My_Call(0,RefreshCall); end
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-23 17:22:36 IP:61.222.xxx.xxx 未訂閱
是可以的! 由於DLL是使用Windows的規範。 因此參數不可定義為T_Call_Proc,應為 Pointer 指針帶入。 如: procedure My_Call(Param: Integer;Proc: Pointer); stdcall; 故呼叫,應為 My_Call(0,@RefreshCall); 發表人 - wameng 於 2004/11/23 17:25:05
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-23 17:37:59 IP:220.135.xxx.xxx 未訂閱
引言: 修正一下是下面這樣 不同的Button會建不同的TImage procedure TForm1.Button1Click(Sender: TObject); begin MyImageA:=TImage.Create(Nil); .... My_Call(0,RefreshCall); end procedure TForm1.Button2Click(Sender: TObject); begin MyImageB:=TImage.Create(Nil); .... My_Call(0,RefreshCall); end
DLL 函數不建議傳物件啦 你可以試試 1.寫兩組RefreshCall函數,RefreshCall1處理MyImageA,RefreshCall2處理MyImageB 2.設定一個FCurrImage:TImage成員 RefreshCall中對FCurrImage作處理 Button1/Button2 在呼叫My_Call時前先設定FCurrImage eg.
procedure TForm1.Button2Click(Sender: TObject);
begin
 MyImageB:=TImage.Create(Nil);     ....
 FCurrImage := MyImageB;
 My_Call(0,RefreshCall);
end
混心雜欲 棄修身~唉
------
唉~
系統時間:2024-05-20 19:27:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!