step1
檔案-新建-vc+±win32-dll
step2
標頭檔案宣告省略,
匯出函式 只要標頭檔案就可以了不需要原始檔中
cpp原始碼:
#include "stdafx.h"
#include "mydll.h"
//使用c的匯出方式 winapi 使用的呼叫規則也是__stdcall 還要在 def 檔案宣告匯出函式
extern "c" mydll_api int _stdcall getmaxnumber(int a, int b)
extern "c" mydll_api void _stdcall showmsg(char * text, char* title)
mydll_api 是 define mydll_api __declspec(dllexport)這樣其他語言還不能用,還要原始檔-新增.def 宣告匯出函式library
exports
getmaxnumber @ 1
showmsg @ 2
library 後面可以跟輸出的dll名字
@後面的是匯出函式的序號 比如1 就是第乙個
方式二,不使用標準的dll 使用mfc的dll
使用mfc的dll匯出dll非常簡單,
第一種使用c的方式匯出 不需要註明呼叫方式
第二種直接在.def中寫匯出函式和上面一樣
extern "c" __declspec(dllexport) void netbios() //mfc dll 匯出函式和 32dll不一樣不需要 註明呼叫方式
我在查閱書籍的時候發現了另外一種的匯出函式的方式:#pragma comment(linker,"/export:要匯出的名字=實際匯出的名字");
引數一:要匯出的名字,比如我要匯出乙個名字為:myfunction的方法,
引數二:實際匯出的函式。我們知道使用c++或者c+的方式預設 呼叫模式的都會改變函式名字 比如_@myfuntion@0這樣的那就是這個
不論是c還是c++匯出名字的亂碼都是有可以理解的意義並不是真的亂碼。
使用這種方法匯出的函式是兩個而不是乙個
如圖:
extern mydllexport_api int nmydllexport;
#pragma comment(linker,"/export:fn=?fnmydllexport1@@yahxz")
mydllexport_api int fnmydllexport1(void);
這個方法還可以用於**,比如自己要匯出的函式不在自己的dll中,自己的dll只是乙個介面 實際實現是在別的dll中,
#pragma comment(linker,"/export:匯出的介面名字=實現模組名字.名字 ");例子如下
呼叫dll這裡只講一種呼叫方式,可以呼叫所有標準的dll,也叫動態呼叫。
1.使用loadlibrary載入動態庫獲得記憶體位址
2.getprocaddress獲得需要呼叫的函式位址
3.宣告乙個指標來接收2的位址
4.使用指標呼叫
5.釋放
hmodule hdll = loadlibrary(l"c:\\users\\administrator\\desktop\\12.dll"); // 載入動態庫
typedef void(winapi *csayhi) (); //定義乙個無返回值 指向空引數方法的指標
csayhi say = (csayhi)getprocaddress(hdll, "sayhello");
say();
freelibrary(hdll);//釋放dll
總結:1.使用標準的的方式匯出函式名稱必須 註明呼叫方式 def中寫明匯出符號和順序(生成的dll比較小)
2.使用mfcdll匯出函式比較簡單只需要在def中寫名匯出符號,或者使用c的方式匯出不需要寫明呼叫方式(這種方式的生成的dll體積比方式1生成的dll體積大非常多,這也是為什麼那麼多人不愛用mfc的原因)
3.這種方式使用過
聊天交友/修仙練級群:709332479
VC 動態鏈結庫 DLL 程式設計
vc 動態鏈結庫 dll 程式設計 一 理解庫 vc 動態鏈結庫 dll 程式設計 二 非mfc dll vc 動態鏈結庫 dll 程式設計 三 mfc規則dll vc 動態鏈結庫 dll 程式設計 四 mfc擴充套件 dll vc 動態鏈結庫 dll 程式設計 五 dll典型例項 動態鏈結庫 dl...
Delphi 製作 dll 動態鏈結庫
delphi 製作 dll 動態鏈結庫,封裝常用的函式。1,建立 dll 檔案 建立工程 檔案 mydll.dpr library mydll uses sysutils,classes,graphics,controls,forms,dialogs,stdctrls procedure mymsg...
用VC建立DLL動態鏈結庫
1.1 建立dll專案 1.2 為dll專案編寫原始檔 標頭檔案dlldemo.h extern c declspec dllexport int sum int a,int b 加法函式。extern c declspec dllexport int max int a,int b 取較大值函式 ...