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

Dll內 Overload的問題

答題得分者是:tonytop
wscken
初階會員


發表:28
回覆:75
積分:45
註冊:2003-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-01 15:03:52 IP:210.243.xxx.xxx 未訂閱
請問各位大大,我在DLL的Function或是Procedure寫overLoad,編譯時不會有錯誤, 當外部程式呼叫時,卻總是呼叫到其中一個,其他的都不會執行,請問是不是應該要注意什麼問題, 還是DELPHI寫DLL時,不能撰寫OverLoad的方法...
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-01 15:45:59 IP:210.64.xxx.xxx 未訂閱
OverLoad的意思不是同函數名稱全部都去執行,而是讓你可以用同函數名稱, 傳入不同的變數,所以外部程式呼叫時,當然還是只會呼叫符合的那個,ok. 若你要每個函數都去執行,有二種方式供參考,一是取不同函數名稱, 二是把原本分開的函數包在同一函數裡,ok.    
wscken
初階會員


發表:28
回覆:75
積分:45
註冊:2003-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-01 18:13:48 IP:210.243.xxx.xxx 未訂閱
tonytop大大,大概誤會我的意思了,我不是要全部執行,只是要執行符合的那個,這些在普通的DELPHI內都會正確,可是寫在DLL裡面就會呼叫錯誤,我貼一下測試的內容好了: DLL裡面的procedure: procedure test();overload; begin ShowMessage('test 1') ; end ; procedure test(Str:String);overload; begin ShowMessage('test 2') ; end ; procedure test(Str,Str1:String);overload; begin ShowMessage('test 3') ; end ; procedure test(Str,Str1,Str2:String);overload; begin ShowMessage('test 4') ; end ; procedure test(Str,Str1,Str2,Str3:String);overload; begin ShowMessage('test 5') ; end ; 當我測試呼叫時, test() ; test('123') ; test('123','456') ; test('123','456','') ; test('123','456','','') ; 永遠只會出現 ShowMessage('test 5') ; 所以我才會說是否寫在DLL中會有不同情形發生...
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-02 10:08:28 IP:210.64.xxx.xxx 未訂閱
喔!原來如此,下次麻煩敘述清楚一點啦! 託您之福,這個問題我好像很久前遇過,那時用unit來解決, 後來較少用overload就不了了之,這次我找help裡終於多學會一招,用在 dll裡的overload,謝啦!  
  //DLL裡的宣告後面加name
  exports
  test() name 'test1',
  test(Str: string) name 'test2',
  test(Str, Str1: string) name 'test3',
  test(Str, Str1, Str2: string) name 'test4',
  test(Str, Str1, Str2, Str3: string) name 'test5';      //程式宣告及呼叫部份
  var
  Form1: TForm1;    const sDll = 'D:\Try\@Ktop\_DLL\OrverLoad\OL.Dll';    procedure test(); external sDll name 'test1'; overload;
procedure test(Str: string); external sDll name 'test2'; overload;
procedure test(Str, Str1: string); external sDll name 'test3'; overload;
procedure test(Str, Str1, Str2: string); external sDll name 'test4'; overload;
procedure test(Str, Str1, Str2, Str3: string); external sDll name 'test5'; overload;    implementation    {$R *.DFM}    procedure TForm1.Button1Click(Sender: TObject);
begin
  test();
  test('123');
  test('123', '456');
  test('123', '456', '');
  test('123', '456', '', '');
end;     
我正確的mail:h832214@hotmail.com
wscken
初階會員


發表:28
回覆:75
積分:45
註冊:2003-08-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-02 15:42:15 IP:210.243.xxx.xxx 未訂閱
tonytop 大大,謝謝你.. 抱歉,下次我會說明清楚.. 您說這個 HELP找的到,看來我要再加強我下搜尋條件的功力才行,我找不到說.. 謝謝你喔 ^^
系統時間:2024-07-03 19:11:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!