VC與Delphi之間動態鏈結庫互相呼叫

2021-04-01 19:30:22 字數 1564 閱讀 6794

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