1. 程式人生 > >靜態庫和動態庫的使用

靜態庫和動態庫的使用

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.查看運行結果,可見調用成功。

技術分享

技術分享

靜態庫和動態庫的使用