2009-06-02 42 views
1

我正在編寫使用第三方SDK(OCX)的應用程序。我在C#中使用SDK,它工作得很好。不過,我可以使用Delphi 2007中SDK中的相同對象創建最簡單的測試應用程序,並且它可以編譯好,但是當它到達某個點時,它們會在同一臺機器上編譯BSOD。我運行了一些使用SDK的其他測試應用程序,並且它們運行正常,所以我知道SDK安裝正常且功能正常。在Delphi 2007中使用SDK BSOD但在C#中有效的應用程序

我工作的其他Delphi項目不使用這個特定的SDK正常運行。

有關如何解決此問題的任何想法?可能需要刪除我在Delphi中安裝的OCX並將它們添加回來?你是怎樣做的?

+1

在BSOD上的信息說什麼? – NineBerry 2009-06-02 00:50:25

+0

計算機已從錯誤檢查中重新啓動。錯誤檢查是:0x0000001e(0xffffffffc0000005,0xfffff8000234ee8e,0x0000000000000000,0x0000000000000000)。轉儲已保存在:C:\ Windows \ MEMORY.DMP中。 – Dave 2009-06-02 09:24:36

回答

2

事實證明,這是由卡巴斯基殺毒引起的。我通過對崩潰轉儲運行Windbg並將其指向kl1.dll來追蹤它。經過四周搜索,我追查了其中確定爲卡巴斯基的this article。我禁用了卡巴斯基,並且BSOD不再發生。

1

浮點異常有可能導致問題。大多數運行時環境都禁用浮點異常,但使用Delphi時,它們已啓用。

的禁用浮點異常,請使用以下代碼:

Set8087CW($133f); 

注意,這會改變你自己的代碼的行爲也是如此。如果浮點計算中存在錯誤,則結果變量將設置爲NaN,Inf +或Inf-,否則不會再有任何異常。

+1

很高興看到熟悉Intel FPU和低級Delphi實現細節的人。自從Turbo Pascal的日子以來,我一直沒有聽說過關於Set8087CW的消息;) – 2009-06-02 03:08:35

3

非常不尋常的問題。基於Windows NT的操作系統通常非常擅長包含用戶應用程序內部環3發生的故障。問題SDK是否通過內核級驅動程序與硬件交互?此外,當系統藍屏死機時,屏幕上會顯示哪些信息。有時候這是關於問題性質的線索(例如,中斷處理程序重入問題,硬件故障,中斷衝突)。有時我會在Dialogic板上看到這種類型的問題。該問題也可能是與驅動程序無關的內核級故障。

沒有額外的細節,它很難做比原因更多的猜測。我傾向於認爲這不是FPU控制字問題,但我可能是錯的。 FPU控制字問題可能會導致異常,但異常需要在關鍵執行環境中發生,如驅動程序不會被操作系統捕獲和處理。

FWIW我看到Delphi JNI庫中的FPU控制字問題,這些問題使JVM和主機應用程序崩潰。修正是用NineBerry建議的代碼明確地包裝調用以更改和恢復控制字。這項工作提供的應用程序不是多線程的。

0

僅僅因爲您可以從其他應用程序使用SDK罰款並不意味着它沒有問題。它可能對某些數據項甚至是不應該存在的項目做出嚴重反應 - 假定內存中的內容沒有正式包含任何內容。

我確定你遇到了由未初始化的數據項引起的錯誤,這些錯誤只是獲得了內存中的任何值,像這樣的事情可能會在傳入的數據區域發生。(比如,填充字節在記錄結構中...)

相關問題