靜態庫和動態庫的使用
阿新 • • 發佈:2017-05-30
window != 函數調用 img clas 處理 dllexport void 再看
1.靜態庫使用比較簡單,就兩步
@1包含靜態庫頭文件#include "文件名"
@2預處理加載靜態庫 #pragma comment(lib,"庫文件名")
2.再看動態庫
@1首先得有動態庫文件,將動態庫文件放在源碼目錄(不然後面加載得傳入文件路徑),這是我的動態庫源文件內容
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 5 //導出函數,加載的使用可以使用 6 _declspec(dllexport) void popWindow() 7 { 8 MessageBoxA(0, "你好,世界", "唐嫣", 1); 9 } 10 11 _declspec(dllexport) int add(int a, int b) 12 { 13 return a + b; 14 }
@2包含windows頭文件#include<windows.h>
#include<stdio.h> #include<stdlib.h> #include<windows.h>
@3聲明指向要調用的函數的函數指針
//定義函數指針來調用動態庫,typedef簡化函數指針類型定義
typedef void(*ppop)();
typedef int(*padd)(int, int);
@4加載動態庫
HMODULE mydll = LoadLibraryA("動態庫.dll");
@5調用動態庫模塊函數
ppop pw;//定義彈窗函數指針
pw = (ppop)GetProcAddress(mydll, "popWindow");//獲得動態庫文件的模塊(函數)的入口地址
3.下面是調用動態庫文件的全部源碼
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 5 //定義函數指針來調用動態庫,typedef簡化函數指針類型定義 6 typedef void(*ppop)(); 7 typedef int(*padd)(int, int); 8 9 10 void main() 11 { 12 HMODULE mydll = LoadLibraryA("動態庫.dll"); 13 if (mydll == NULL) 14 { 15 printf("動態庫加載失敗"); 16 } 17 else 18 { 19 //彈窗函數調用 20 ppop pw;//定義彈窗函數指針 21 pw = (ppop)GetProcAddress(mydll, "popWindow");//獲得動態庫文件的模塊(函數)的入口地址 22 if (pw != NULL) 23 { 24 pw();//調用 25 } 26 27 //求和函數調用 28 padd pa; 29 pa = (padd)GetProcAddress(mydll, "add"); 30 if (pa != NULL) 31 { 32 int m = pa(13, 16); 33 printf("%d\n", m); 34 } 35 36 } 37 }
4.查看運行結果,可見調用成功。
靜態庫和動態庫的使用