dll檔案生成與使用

2021-10-09 05:19:26 字數 1509 閱讀 8726

使用環境vs2019

1、生成dll

建立工程時選擇dll,工程命名testdll1會生成如下**,作為dll檔案被呼叫的入口

// dllmain.cpp : 定義 dll 應用程式的入口點。

#include "pch.h"

bool apientry dllmain( hmodule hmodule,

dword ul_reason_for_call,

lpvoid lpreserved

)return true;

}

新增如下內容匯出函式,使函式可以被其他程式呼叫,__declspec(dllexport)相關資訊直接搜尋即可

extern "c" __declspec(dllexport) void test_fun();

/*test_fun();函式被匯出,可被其他程式呼叫*/

void test_fun()

然後生成,會產生如下檔案(testdll1是工程名)

testdll1.dll

testdll1.exp

testdll1.lib

testdll1.ilk

2、動態鏈結庫的靜態呼叫(dll和lib檔案)。

靜態呼叫是在編譯時連線的,動態呼叫是在執行時使用的。

新建應用工程,將之前生成的testdll1.dll、testdll1.lib複製到新工程的原始碼目錄編譯時使用lib檔案,執行時使用dll檔案。編輯原始碼如下

#include#pragma comment(lib,"testdll1");  //引用庫檔案

extern "c" void test_fun(); //宣告函式

int main()

執行結果:

3、動態鏈結庫的動態呼叫dll

使用loadlibarty匯入dll,再使用getprocaddress獲取指向dll中的函式的位址,即可進行呼叫。示例如下

如果函式成功,則返回值是模組的控制代碼。

如果函式失敗,則返回值為null。

getprocaddress用法:

farproc getprocaddress( hmodule hmodule, lpcstr lpprocname );

hmodule:包含函式或變數的dll模組的控制代碼。

lpprocname :函式名;

如果函式成功,則返回值是匯出的函式或變數的位址。

如果函式失敗,則返回值為null。

#include#include typedef void (*func_p)(void);

int main()

return 0;

}

執行結果符合預期。

dll生成lib檔案

如何從dll檔案匯出對應的lib檔案?visual c 開發工具提供了兩個命令列工具,乙個是dumpbin.exe,另乙個是lib.exe。利用這兩個工具即可從dll匯出其對應的lib。1 在命令列執行 dumpbin exports yourdll.dll yourdll.def exports ...

C 生成DLL檔案

使用csc 命令將.cs 檔案編譯成 dll 的過程很多時候,我們需要將 cs檔案單獨編譯成 dll 檔案,操作如下 開啟命令視窗 輸入cmd 到控制台 cd c windows microsoft.net framework v1.1.4322 轉到vs.net 安裝的該目錄下 執行csc 命令c...

VS2005使用DEF檔案來生成DLL與Lib

vs2005使用def檔案來生成dll與lib時,與vc6的設定是不一樣 的,搞的我鬱悶一下午.還好總算解決了 vc6工程中,只要有def檔案並將其新增到工程中,vc6就可以自動地生成dll與其相應的lib檔案了。但是vs2005不一樣,需要指定def檔案,方法如下 把 desdll.def 新增到...