Delphi動態呼叫C 寫的DLL

2021-07-11 04:26:24 字數 2300 閱讀 3367

c++ dll 檔案,建議用最簡單的c++編輯工具。不會加入很多無關的dll檔案。本人用codeblocks+mingw。不像

vs2010,dll編譯成功,呼叫的時候會提示缺其他dll。 系統生成的main.h和main.cpp

#ifndef __main_h__

#define __main_h__

#include

/*  to use this exported function of dll, include this header

*  in your project.

*/#ifdef build_dll

#define dll_export __declspec(dllexport)

#else

#define dll_export __declspec(dllimport)

#endif

#ifdef __cplusplus

extern "c"

#endif

#endif // __main_h__

#include "main.h"

// a sample exported function

int dll_export add(int plus1, int plus2)  //匯出函式add 的實現

extern "c" dll_export bool apientry dllmain(hinstance hinstdll, dword fdwreason, lpvoid lpvreserved)

return true; // succesful

}只有乙個簡單函式add,就是為了測試delphi能不能成功呼叫

delphi 用按鈕加入呼叫函式

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

tform1 = class(tform)

btn1: tbutton;

edit1: tedit;

procedure btn1click(sender: tobject);

private

public

end;

varform1: tform1;

_dllmoudle: thandle;

_getadd:function (plus1:integer;  plus2:integer):integer;cdecl;  

// function add(  plus1:integer;  plus2:integer):integer;

//       stdcall; external 'mydll.dll' name 'add';  

// 靜態呼叫,靜態呼叫有問題,還是宣告stdcall 再c++種宣告匯出函式的原因

// 把stdcall 改為cdecl 就可以用靜態呼叫了。具體c++宣告函式和delphi對應關係看後面

implementation

procedure tform1.btn1click(sender: tobject);

varl_int : integer;

begin

try_dllmoudle := loadlibrary('mydll.dll');

showmessage('載入成功!!!');

except

showmessage('載入失敗!!!');

exit;

end;

if _dllmoudle > 32 then

begin

trybegin

@_getadd:=getprocaddress(_dllmoudle,'add');

l_int:=_getadd(5,6);

edit1.text:=inttostr(l_int);

endexcept

showmessage('有問題!');

end;

end;

//   l_int:=add(1,3);

//   edit1.text:=inttostr(l_int);

end;

end.

c++的引數呼叫方式 對應的delphi的引數呼叫方式

_declspec cdecl

winapi,callback stdcall

pascal pascal

以上請多試一下。我也是測試很多次才成功的。以後核心邏輯用c++。

C 呼叫Delphi寫的DLL

在c 中可以這樣呼叫 呼叫 這裡需要注意的是要外傳的pchar型別引數,在c 中對應使用stringbuilder,如果使用string沒有任何資訊傳出,如果使用ref string形式,則會出現記憶體錯誤。在c 中可以這樣呼叫 呼叫 經過測試 delphi中integer的引數使用c 中的int即...

關於delphi呼叫c 寫的webservice

因為這次專案涉及到跨平台的,所採用delphi呼叫webservice 一開始的時候用delphi自動生成wsdl。呼叫hellowordl成功。非常開心,可是問題來了,helloworld是不需要傳引數,於是我就寫了乙個簡單的函式 public string returnstr string tt...

C呼叫delphi動態庫問題

最近兩天協助成都吉勝的同事做乙個c呼叫delphi動態庫的demo,原以為會很簡單的,畢竟以前還做過delphi呼叫c動態庫的實踐。實踐過程中卻也碰到了不少問題,現記錄下來,供以後參考 開發工具 delphi7.0 vc 6.0 注意點 1 delphi中的匯出函式必須申明為cdecl,而在vc中必...