在98下用Rundll32.exe去啟動dll會產生PageFault |
尚未結案
|
babyfish0226
一般會員 ![]() ![]() 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
程式碼很單純,用程式來調用dll是ok的,但用Rundll32.exe來啟動時在winxp下是正常的,但在win98se下在執行結束後則會跳出PageFault的錯誤,程式碼如下:
library dlltest; uses SysUtils, Dialogs, Windows, Classes; {$R *.res} procedure test; stdcall; begin ShowMessage('用Rundll32.exe執行dll測試ok!'); end; exports test name test; end.在98及xp下執行 rundll32.exe dlltest.dll,test均會正常show出字串的訊息,惟一不同的是在98下的程式結束時會有錯誤,我試著調用別人的dll來測試,結果相同,小弟是使用Delphi7撰寫,會是delphi7的關係嗎?還是要特別處理rundll32的使用? 請各位大哥多多幫忙~~~~ |
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
|
babyfish0226
一般會員 ![]() ![]() 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
我把錯誤訊息給Po出來好了,基本上就是常見的執行作業無效,別台98...公司都是xp...傷腦筋,至於虛擬記憶體的部份調整過,不過還是一樣~~
|
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
library dlltest; uses SysUtils, Dialogs, Windows, Classes; {$R *.res} procedure test; export;stdcall;far; begin ShowMessage('用Rundll32.exe執行dll測試ok!'); end; exports test name 'test'; end.改成紅色的部份..這樣..試看看!! 我是覺得應該是尼的DLL寫的有問題..如果無法有交叉測試的98平台.. 可以在寫一隻程式去CALL這個DLL..GOOD LUCK< > (您是娃娃魚!?< > 好久不見ㄚ ^^) 發表人 - geniustom 於 2004/10/23 03:34:38 |
babyfish0226
一般會員 ![]() ![]() 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
為了測試我把許久沒用的VMWare再拿起來裝,測試平台為windowsMe,可惜的是只有錯誤訊息稍有不同,您的紅色字部份修正過仍然無效,我換過Delphi6來撰寫,結果也是相同。 我不曉得這問題是屬於我的個案還是一般性問題,dll的部份再三用程式去呼叫均正常,只有當用rundll32.exe去啟動才會出現問題。 這一招一般都是木馬或網咖在用的吧,原本以為很簡單沒想到R#@ZX#$%
寫程式真是不容易啊! 真的好久不見,在k.top我真的算嫩咖,我只敢潛水默默偷學,其實我最常上的網站不是yahoo拍賣就是ktop了,所以我一直都在喔。
|
geniustom
版主 ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
剛剛閒著沒事..所以就灌了一下VM..結果的確如您所說的那樣..
會出現PAGE FAULT..所以我想問題應該是出在執行了DLL..卻沒有正確的釋放
(如果是一般程式去CALL DLL..會由那支程式來負責釋放)
也許98的RUNDLL32並沒有這個機制..而2000以上會由OS釋放..所以沒這個問題
所以..需要在函式結束時釋放自己本身..
剛剛突然想到這一點..所以亂TRY了一下..程式修改如下..
library dlltest; uses SysUtils, Dialogs, Windows, Classes; {$R *.res} procedure test; export;stdcall;far; begin ShowMessage('用Rundll32.exe執行dll測試ok!'); FreeLibrary(GetModuleHandle(NIL)); end; exports test name 'test'; end.後來我用VM來試..果然沒問題了.. 您也試試吧..GOOD LUCK |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |