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

DLL在 WIN98及2000執行上的問題

缺席
P.D.
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-09 10:56:57 IP:61.222.xxx.xxx 未訂閱
請問各位, 以下程式是我定義一個可以由指定檔案來動態載入dll的片斷,  現在發生一個問題, 在win98下執行"DLLName"的載入都沒有問題, 但在2000系統執行同樣動作, 卻出現 Invalid Filename 的錯誤, 如果強制進入就會出現 File not found的行為, 我確定傳入的 dll name 與 function name的大小寫也都一致, 後來我在2000上架clipper去查, 發現問題出在 @DLLsys:= GetProcAddress 與 DLLsys(parm1, parm2, parm3, parm4, parm5) 這兩列上(主要當在下面這列), 不知各位有經驗者是否知道如何解決, 我在猜是getprocaddress這個問題, 可是我不知道要如何解決98與2000不同的問題, 因為這段也是前輩指點得來的! 謝謝!    ps:如果以下程式有少任何變數的宣告, 請不要指正是錯誤, 因為這段很長, 我刪掉了很多不必要的程式, 只列出主要地方    
function TSysUT.LoadDLLSys(DLLName,FunctionName: string;
                           Disk: Char; FormName: string;
                           parm1, parm2, parm3, parm4, parm5:variant): boolean;
          type
              TDLLsys = procedure(parm1, parm2, parm3, parm4, parm5: variant); stdcall;
              THandle = Integer;              var handle: THandle;
              DLLsys: TDLLsys;
begin
     success:= '';
     doRun:= True;
     try
     if not FileExists(DLLname) then begin
        Application.MessageBox(pChar('不存在的DLL檔:(' DLLName ')'),'執行錯誤',
                                MB_ICONERROR MB_OK);
        result:= False;
        exit;
     end;
     handle:= LoadLibrary(pChar(DLLName));
     if handle <> 0 then begin
        @DLLsys:= GetProcAddress(handle,pChar,FunctionName));         // Link
        if @DLLsys <> nil then begin
           DLLsys(parm1, parm2, parm3, parm4, parm5);  // Run
        end
        else success:= '不存在的函式定義:(' FunctionName ')';
        FreeLibrary(handle);
     end
     else success:= DLLName ':執行溢位!';
     except
        on E: Exception do begin
           ErrorMsg:= E.Message;
           SysUT.ErrorShow(999,'DLLRUN',ErrorMsg,'系統錯誤');
        end;
     end;
result:= True;
end;    
發表人 - P.D. 於 2002/10/09 10:59:36
ecafe
一般會員


發表:0
回覆:8
積分:11
註冊:2002-07-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-12 23:13:32 IP:211.23.xxx.xxx 未訂閱
你呼叫的DLL也是以Delphi寫的嗎? GetProcAddress()在98或2000上的用法是一樣的。 我覺得比較有可能造成問題的是parm1~5這幾個型態為variant的參數。 建議你不妨先拿掉這幾個參數試試。
P.D.
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-15 00:14:03 IP:210.85.xxx.xxx 未訂閱
引言: 你呼叫的DLL也是以Delphi寫的嗎? GetProcAddress()在98或2000上的用法是一樣的。 我覺得比較有可能造成問題的是parm1~5這幾個型態為variant的參數。 建議你不妨先拿掉這幾個參數試試。
我試著把我自己的參數傳遞拿掉, 不過情況還是一樣!
系統時間:2024-04-30 13:18:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!