線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2074
推到 Plurk!
推到 Facebook!

同樣的.dll及呼叫程式在不同的電腦執行居然有不同結果,請問原因為何?

答題得分者是:pceyes
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-20 17:29:46 IP:218.164.xxx.xxx 未訂閱
我的住家及工作場所的電腦都是 win xp home版及delphi7 pro  update1,奇怪是呼叫程式呼叫.dll之函數在住家的電腦運作正常,在工作場所的電腦也運算正確只是隨後會出現一錯誤訊息,將工作場所的電腦的dll及程式複製到住家的電腦後執行結果同在工作場所的電腦的情況,但用住家的電腦重新編譯.dll及程式又運作正常且無任何錯誤訊息,r:=add_str(edit5.Text,edit6.Text);
showmessage(' r =' r);
在住家電腦運作正常且沒有任何錯誤訊息.
在工作場所電腦會顯示正確結果(showmessage(' r =' r);),但接著會出現"invalid pointer operation."之錯誤訊息.
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('result::' string(add_pchar(pchar(Edit7.Text),pchar(Edit8.Text))));
end;
end.

我有三問題,
1.為何兩部電腦的os及delphi都一樣,卻會發生程式在一部電腦執行正常在另在一部電腦執行卻不正常?
2.這是電腦問題還是寫程式之問題還是其他原因?
3.若找不出原因,是否乾脆以後程式就用家的電腦編譯,編譯後在交給客戶,請問程式在住家的電腦執行正常能否保證在客戶的電腦也會執行正常?


編輯記錄
vbkiller 重新編輯於 2009-09-20 21:54:42, 註解 無‧
vbkiller 重新編輯於 2009-09-20 21:56:37, 註解 無‧
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-22 06:39:49 IP:220.141.xxx.xxx 訂閱
delphi 的dll 有記憶體問題,尤其是舊的BolandMM.dll在使用String會有有記憶體問題(Memory Share),剛好昨天在想這個問題,故在delphi 2006以後的版本Boldand已用FastMM取代做記憶體管理。但無論如何,還是請你不要用String傳值,改用Pchar(傳址)來取代string。
1. 你可以做壓力測試,在不同環境下,會發現使用String不定時會出現錯誤,但在IDE環境卻很少出錯。
2. 在網路上用FastMM來查詢相關問題,站上的資料比較少。
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2009-09-22 06:43:48, 註解 無‧
pceyes 重新編輯於 2009-09-22 06:48:23, 註解 無‧
vbkiller
一般會員


發表:65
回覆:28
積分:18
註冊:2007-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-23 15:14:29 IP:125.224.xxx.xxx 未訂閱
pceyes你好:

何謂壓力測試?
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-23 16:46:29 IP:60.248.xxx.xxx 未訂閱
不要用delphi string型態,改用C語言的PChar型態
http://delphi.ktop.com.tw/board.php?cid=30&fid=70&tid=77574
編輯記錄
pedro 重新編輯於 2009-09-23 16:48:20, 註解 無‧
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-23 21:07:44 IP:122.126.xxx.xxx 訂閱
樓上的都說的很清楚了。

也說了很多次,撰寫DLL 請遵守標準 Windows StdCall 變數型態 。
這樣無論是 C 或 VB 也能引用 Delphi 寫的DLL。

既然你已經申明使用 stdCall 怎麼還會冒出 String 型態。
若覺得使用 PChar 不好處理,也不考慮通用就用 BPL 比較簡單。


編輯記錄
RootKit 重新編輯於 2009-09-23 21:09:54, 註解 無‧
系統時間:2024-04-19 7:12:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!