2010-07-20 29 views
1

我有一個非常簡單的Delphi 2010 dll,我從Visiual Studio 2008 C ATL控制檯應用程序(MVF GUI應用程序也不工作)加載。當我直接從IDE調試控制檯應用程序 - 沒有中斷點時 - 應用程序的輸出不正確,但是當我直接運行應用程序時,或者如果使用調試程序附加到進程,則它可以100%工作。從Delphi控制檯應用程序(即從IDE運行它)調試相同的DLL也可以。VS2008/2010調試器更改應用程序行爲

VS調試器似乎打破了應用程序,取決於你如何運行它。 VS2010也一樣!

我已經100%肯定 - 幾次! - dll導出的數據類型和調用約定與控制檯應用程序中的數據類型和調用約定匹配。我可以詳細討論,但我不想將此事與可能無關的信息混淆。如果我提供的是不夠的,請告訴我是否必須詳細瞭解代碼的細節。

有沒有人經歷過這種事情,並知道如何解決它?

+0

Gerhard,你檢查過並行問題/比賽條件嗎? (這是一個多線程的應用程序?)。 此外,如果你用delphi/dll等標記你的問題,你可能會瞄準更好的觀衆。 – 2010-07-20 17:27:40

+0

這是一個單線程的應用程序。 – 2010-07-21 07:24:24

+1

這兩種情況的輸出有什麼區別?調試器改變各種事物;時間肯定會有所不同,但其他事情也可能不同。我們需要一些額外的信息來了解行爲不同的方向。 – 2010-07-21 11:11:45

回答

0

我有類似的問題一次(IDE /調試器和獨立應用程序中的不同行爲)。事實證明,我已經檢查了未設置變量的值。調試器在先前使用的內存塊中分配它(總是!),使得值不爲空,並且應用程序正常工作(因爲只有條件塊是錯誤的)。但是,操作系統有時會將應用程序置於空的內存塊(填充0),條件失敗並且應用程序崩潰。

也許這是問題?嘗試使用OutputDebugString()在庫運行時追蹤變量的值。如果沒有我相信的源代碼,那很難說,可能是什麼原因。

此致敬禮 - Spook。