[英]Error when calling c++ dll from delphi
我正在嘗試為某些 Fortran 代碼創建一個 C++ 包裝器(使用 MSVS2013)。 應該從 DELPHI 調用包裝器(在 DELPHI 5 中創建的舊代碼 - 我無法觸摸)。 (DELPHI -> C++ dll -> fortran dll) 目的是將一些具有int
和double
以及double[]
的數據struct
(在 delphi 中record
)從 delphi 傳遞到 fortran 進行計算。 c++ dll -> fortran 沒問題 - 我已經用另一個 c++ 可執行文件進行了測試。 有用。 問題是當 delphi 調用 c++ 和 c++ 調用 fortran 時。 然后我收到一個錯誤,說
項目“myDelphiProject.exe”引發異常類 EZeroDivide 並帶有消息“浮點除以零”。
如果調用 fortran 沒有發生,則調用 c++ 包裝器沒有問題。 我已經測試並確認所有變量都在 delphi 和 c++ 之間通過。 調用約定設置為cdecl
。
簡化代碼:Delphi
interface
rec1 = record
var1,var2: double;
end;
procedure myCppWrap(record1: myrecord); cdecl; external 'mycppwrap.dll' name '_myCppWrap'
implementation
procedure MyDelphiFunc();
var
...
begin
myCppWrap(rec1)
...
簡化的 C++ 代碼:
struct rec1
{
double var1,var2;
}
extern "C" __declspec(dllexport) __cdecl myCppWrap(rec1 r1);
extern "C" *myFortranSub(double *varF1,double *varF2);
簡而言之:DELPHI -> C++ 有效,C++ -> Fortran 有效,DELPHI -> C++ -> Fortran 無效。
有誰知道出了什么問題?
編輯:好的..所以我設法縮小了范圍:我除以零導致無窮大(這是給定輸入的正確內部結果 - 這不是fortran dll的直接輸出)。 當使用默認發布設置編譯 fortran dll 時,這在被 c++ 調用但不是從 delphi 調用時運行良好。 然而,它在使用調試設置時確實有效,無論是在 c++ 還是 delphi 中。 我將變量輸出到文本文件(除法之前和之后)進行驗證,在所有 4 種情況下,除數都是 0,結果在三種情況下都是“inf”。 在調試和發布模式下,我對浮點異常處理“產生 NaN、有符號無窮大和非規范結果”具有相同的設置。
事實證明,這更像是一個編譯器設置/標志問題,而不是編碼……
有人對此有經驗嗎?? (我正在研究一個小而可驗證的代碼段)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.