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中必...