C呼叫delphi動態庫問題

2021-04-12 22:14:21 字數 668 閱讀 1143

最近兩天協助成都吉勝的同事做乙個c呼叫delphi動態庫的demo,原以為會很簡單的,畢竟以前還做過delphi呼叫c動態庫的實踐。實踐過程中卻也碰到了不少問題,現記錄下來,供以後參考:

開發工具:delphi7.0 、vc++6.0

注意點:

1、 delphi中的匯出函式必須申明為cdecl,而在vc中必須申明為__cdecl

教訓:delphi中的stdcall和vc++中的__stdcall是不同的呼叫規則,具體差異有待進一步分析,我在實踐過程中用stdcall在vc中除錯時一直報異常,提示呼叫規則不匹配

2、 delphi中的**函式和vc中定義的**函式指標都必須申明為cdecl和__cdecl

3、浮點數用delphi得format(fmt,floatnum)來獲取並轉換為字串;用floattostr會導致不精確得誤差

4、 資料型別要匹配

delphi

vc++

single

float      4位元組

double

double     8位元組

…另外還有vc的介面編成中,加入了richedit控制項,導致程式不能夠正常啟動,除錯報afxenablecontrolcontainer()未呼叫,實際上卻是應該呼叫afxinitrichedit()函式。(ps:我對控制項的使用是半吊子,呵呵!)

Delphi呼叫C 編寫的動態鏈結庫dll的方法

首先宣告這個dll中的函式,然後就可以直接呼叫了 function addnum num1,num2 integer integer stdcall external project1.dll name addnumber function addnum num1,num2 integer inte...

Delphi動態呼叫C 寫的DLL

c dll 檔案,建議用最簡單的c 編輯工具。不會加入很多無關的dll檔案。本人用codeblocks mingw。不像 vs2010,dll編譯成功,呼叫的時候會提示缺其他dll。系統生成的main.h和main.cpp ifndef main h define main h include to...

DELPHI中動態呼叫dll

顯式例子 unit main inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,stdctrls,extctrls,grids,dbgrids,db,dbtables,dbc...