DLL在 WIN98及2000執行上的問題 |
缺席
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位, 以下程式是我定義一個可以由指定檔案來動態載入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 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |