使用環境vs2019
1、生成dll
建立工程時選擇dll,工程命名testdll1會生成如下**,作為dll檔案被呼叫的入口
新增如下內容匯出函式,使函式可以被其他程式呼叫,__declspec(dllexport)相關資訊直接搜尋即可// dllmain.cpp : 定義 dll 應用程式的入口點。
#include "pch.h"
bool apientry dllmain( hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)return true;
}
然後生成,會產生如下檔案(testdll1是工程名)extern "c" __declspec(dllexport) void test_fun();
/*test_fun();函式被匯出,可被其他程式呼叫*/
void test_fun()
2、動態鏈結庫的靜態呼叫(dll和lib檔案)。testdll1.dll
testdll1.exp
testdll1.lib
testdll1.ilk
靜態呼叫是在編譯時連線的,動態呼叫是在執行時使用的。
新建應用工程,將之前生成的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 新增到...