有時候,用戶只能得到dll動態庫文件以及對這個文件的接口函數名稱。當我們調用這個dll庫時,我們就不能像平時一樣,通過.lib,.h和.dll這三個文件來調用dll庫內的算法了。
這里介紹一種只提供dll函數接口與.dll文件的調用方法。
順帶一下,先講一下dll創建流程:
創建--->項目--->Win32-->Win32控制應用程序--->DLL(D) 空項目
添加頭文件WinDll.h
1 #ifndef LIB_H 2 #define LIB_H 3 extern "C" int __declspec(dllexport) add(int x,int y); 4 #endif
注: 3 extern "C" int __declspec(dllexport) add(int x,int y); 申明動態庫鏈接,這個很重要。
添加WinDll.cpp源文件
1 #include"Windll.h" 2 int add(int x, int y) 3 { 4 return x + y; 5 }
編譯后,生成 WinDll.dll文件。至此,.dll文件創建完成。
下面是如何調用這個dll文件。
創建一個新的項目
並創建添加源文件
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<Windows.h> 4 5 typedef int(*lpAddFun)(int, int); 6 7 int main(int argc, char **argv) 8 { 9 HINSTANCE hDll; 10 lpAddFun addFun; 11 hDll = LoadLibrary(TEXT("..\\WinDll.dll")); 12 if (!hDll) 13 { 14 printf("Can't load dll."); 15 } 16 else 17 { 18 addFun = (lpAddFun)GetProcAddress(hDll, "add"); 19 if (addFun != NULL) 20 { 21 printf("result=%d\n", addFun(1, 2)); 22 } 23 FreeLibrary(hDll); 24 } 25 system("pause"); 26 }
注: hDll = LoadLibrary(TEXT("..\\WinDll.dll")); 加載dll文件,這個路徑為dll存放路徑,也就是我們要將之前生成的dll這個文件拷貝到當前項目目錄下就可以了。
編譯運行:
謝謝。