用MFC封裝的一個數學演算法DLL,為了驗證演算法的正確性,DLL提供了一個介面,該介面不需要任何輸入變數,譬如DLLTest()。
用MFC程式呼叫,計算出的結果是正確的,但用Delphi呼叫,計算出來的結果不正確。
該演算法涉及大矩陣求逆及奇異值分解。
不解的是,該dll所有資料輸入及計算都是自身實作,為何dephi呼叫結果不正確?
uj5u.com熱心網友回復:
那得看dll中如何處理的了,關鍵在于資料型別uj5u.com熱心網友回復:
MFC和Delphi對該Dll的呼叫代碼貼出了看看。uj5u.com熱心網友回復:
你的呼叫方法錯了uj5u.com熱心網友回復:
計算出的結果是什么型別?uj5u.com熱心網友回復:
stdcalluj5u.com熱心網友回復:
Delphi的呼叫程序:uses
function DllTest():Boolean;stdcall;external 'Invert.dll';
procedure TForm1.btn3Click(Sender: TObject);
begin
DllTest();
end;
Win32 Console Application的呼叫程序:
extern "C" bool _stdcall DllTest(void);
#pragma comment(lib, "Invert.lib")
int _tmain(int argc, _TCHAR* argv[])
{
DllTest();
return 0;
}
uj5u.com熱心網友回復:
DLL自身從一個txt讀入資料進行計算,并把結果寫到另一個txt中,整個程序都是獨立于外部呼叫的,不理解。uj5u.com熱心網友回復:
我曾經碰到這樣的一個情況,也是DLL呼叫的問題,用VC++呼叫結果正常,用Delphi呼叫就不正常,情況也類似于樓主。后來我問了提供Dll給我們的公司,他們說該Dll用VC++編譯而成的,用Delphi呼叫也許會存在不兼容的情況。 后來查了許多的資料,也沒有相關的說明。但是我們同時曾經自己用VC++撰寫DLL,用Delphi呼叫時行時不行,最后不了了之,全改成VC++開發。估計你也是這種情況,也許VC++在生成DLL的時候是否還要注意什么兼容性的設定呢?uj5u.com熱心網友回復:
呼叫時的資料型別、長度對照,查一下Delphi和C的映射,尤其牽涉到Delphi的Word之類長度不定的值時,會出錯,俄以前遇到過:)uj5u.com熱心網友回復:
今天又用C++Builder測驗了一下,計算結果沒有問題,就是delphi呼叫結果不正確,郁悶!uj5u.com熱心網友回復:
C++Builder結果一致,因為都是C++語言Delphi用的是Pascal語言,憑什么結果要一致
uj5u.com熱心網友回復:
可能是頭檔案寫錯了,呼叫順序不一致。uj5u.com熱心網友回復:
幾乎100%是各自資料型別的差異導致的,貼你DllTest()的MFC實作代碼來看看uj5u.com熱心網友回復:
估計是CPU的浮點標志的問題轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151923.html
標籤:語言基礎/算法/系統設計
上一篇:協議攻擊(二)
下一篇:怎么加載sharpmap
