vc中dll聲名格式:
extern 「c」 void __declspec(dllexport) __stdcall showmess(hwnd hwnd, char* mess);
輸出格式為:_showmess@8,「8」為函式引數位元組數
為了避免名稱**,可採用以下方法解決:
1.宣告中不加__stdcall,採用vc預設格式__cdecl,但在delphi中要註明呼叫格式為cdecl。
2.在vc工程中新增def檔案,如:
library
exports
showmess @1
則dll中輸出函式名稱不**。
delphi中呼叫格式:
procedure showmess (h:hwnd; mess:pchar); stdcall; external libname;
如無stdcall或cdecl聲名,delphi預設register(fastcall)呼叫格式。
注意delphi與vc的對齊格式不同,在vc中定義結構時要用以下格式:
#pragma pack(4)
//結構定義
#pragma pack()
常用工具:
常用工具:
tdump.exe-delphi4 和 c++ builder 3 提供
impdef.exe 和 implib.exe - c++ builder 3提供
dumpbin.exe-vc5.0提供
lib.exe-vc5.0提供
vc呼叫delphi的dll
delphi中的聲名格式:
function showdialog( hmainwnd:thandle; msg:pchar ):integer; stdcall;
輸出到dll檔案中時,名稱不**。
vc中的呼叫格式:
extern "c" __declspec(dllimport) int __stdcall showdialog( hwnd hwnd,char* msg );
.如帶有__stdcall,則要求lib檔案中對應函式名稱**,可有以下步驟生成lib檔案:
.用impdef.exe生成def檔案,格式為:impdef def檔名 dll檔名
.手工調製def檔案引數,如showdialog改為showdialog@8
.用lib.exe生成lib檔案,格式為:lib /def:def檔名
.如聲名中無__stdcall,預設呼叫格式仍為stdcall,但不要求名稱**,用以下批處理檔案mklib.bat可生成lib檔案:
@echo off
if %1.==. goto error
impdef %1.def %1.dll
lib /def:%1.def
goto end
:error
echo usage: mklib dllname
echo note: don't add extension ".dll" to parameter "dllname"
:end
VC 動態鏈結庫
mfc 一 建立dll 1 建立mfc動態鏈結庫,在第4部選擇 regular dll with mfc shared linked 型別,即建立與mfc動態鏈結的常規dll,可以被win32應用程式和mfc應用程式使用。2 新增函式。在生成的工程的test.h檔案中新增語句如下 extern c ...
Delphi 製作 dll 動態鏈結庫
delphi 製作 dll 動態鏈結庫,封裝常用的函式。1,建立 dll 檔案 建立工程 檔案 mydll.dpr library mydll uses sysutils,classes,graphics,controls,forms,dialogs,stdctrls procedure mymsg...
靜態鏈結與動態鏈結
基於gmp開發第三方庫,後者以動態鏈結庫 靜態庫?對方式發布,為了效率gmp建議對該庫採用靜態鏈結,所以,目的是生成靜態鏈結gmp庫的庫檔案 動態庫?靜態庫?一 生成可執行檔案 1.動態鏈結庫的編譯 mac和linux都是 gcc o param convention1 param conventi...