大家好我是Andy,歡迎各位來到第六天,明天又要開始上班上課了,假日還要補班天啊想玩又想休息但是又要學習,人篸真苦,好吧我們話不多說直接進到今天的學習筆記。
首先我們來回顧一下靜態調用函式庫是怎麼運行的?是利用在exe輸出前使用連結器對dll連結,讓exe可以調用dll的函式,而動態調用函式庫呢?則是在運行時連接的,那話不多說我們進入程式碼。
#include <windows.h>
/*靜態調用函式庫
#pragma comment(lib,"Dll5")
extern "C" void ccc();
int main(){
HWND window;
window = FindWindow(NULL, "Debug");
SendMessage(window, WM_CLOSE, 0, 0);
ccc();
}
*/
typedef void (*ccc)();//dll假設寫ccc(int)後面也要()也要加int
int main()
{
HMODULE Hmodule = LoadLibrary("Dll5.dll");
if (Hmodule == NULL) {
MessageBox(NULL, "沒有抓到Dll", "標題", MB_OK);
return -1;
}
ccc a=(ccc)GetProcAddress(Hmodule, "ccc");
a();
}
如果使用動態調用動態函式庫的話我們首先要有一個指針指向dll裡面的函式,而這項工作我們就是使用typedef void(*ccc)()
記住因為式指針所以前面一定要有一個 * 字號
而HMODULE Hmodule = LoadLibrary("Dll5.dll");
這行又是做甚麼的呢,這是幫助我們取得Dll的一個句柄,句柄又是甚麼東西?簡單來說就是他使用的時候系統分發一個ID給他,而我們使用這個ID可以去進行索引
之後建置成功了也可以將exe和dll移到另一個資料夾試試看
ccc a=(ccc)GetProcAddress(Hmodule, "ccc");
今天嘗試了動態調用函式庫,打完有點累趕快洗洗睡,最近都恍神恍神的,如果有錯的地方我想到我會第一時間更新文章,不能讓各位學到錯的東西啊請收下我的膝蓋,還請各位見諒,接下來我們就明天見了。