2015-08-18 46 views
0

在我加入公司之前,我已經有了一段用Delphi編寫的遺留代碼,我的IDE的行爲讓我懷疑自己的很多技能。實際異常之後的應用程序定義異常(代碼0x0eedfade)

加載DLL和分配的功能OpenDB,從DLL GetError和GetErrorStr之後,該代碼被調用:

If @OpenDB <> nil then 
begin 
    DB_num := OpenDB((PAnsiChar(file))); 
    if DB_num = -1 then 
    begin 
    err := GetError; 
    ErrorString := GetErrorString(err); 
    raise Exception.Create(ErrorString); 
    Exit; 
    end 
end else 
    Exit; 

OpenDB返回-1和GetErrorString返回一個錯誤消息,並且異常。沒有什麼大不了的,存在錯誤的數據庫並且總是會發生錯誤。得到我的是,在引發異常之後,彈出「...應用程序定義的異常(代碼0x0eedfade)...」。之後,我得到訪問違規。

+0

很難評論沒有更多的上下文。 –

+0

最有可能的內存損壞。 –

+0

等等,所以,在引發異常之後,您會看到一個彈出窗口提示異常被提出了?你還期望發生什麼? –

回答

2

錯誤消息意味着您正在跨越模塊邊界將Delphi異常提升爲一段不知道如何處理Delphi異常的代碼。 0x0EEDFADE是Delphi raise語句傳遞給Win32 RaiseException()函數的參數dwExceptionCode的值。只有Delphi和C++ Builder RTL知道如何處理這些異常。您絕不能在模塊邊界之間引發異常,因爲一個模塊不知道另一個模塊是否可以處理它。不同的模塊可以用不同的語言/框架編寫。

+0

確實。如果可能,[永遠不要讓EXCEPTION ESCAPE DLL](http://praxis-velthuis.de/rdc/articles/articles-cppobjs.html#exceptions)。 –

相關問題