靜態鏈接庫和動態鏈接庫
阿新 • • 發佈:2018-05-08
pro 成員 ostream 指令 num n) else .com 需要
編譯生成LIB
1>------ 已啟動生成: 項目: test, 配置: Debug Win32 ------ 1> test.cpp 1> test.vcxproj -> D:\visual studio\test\Debug\test.lib ========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========
編譯生成DLL:
#ifndef __ADD_H__ #define __ADD_H__ extern"C" int _declspec(dllexport) add(int x, int y); #endif
#include "add.h" int add(int a, int b) { return a + b; }
1> add.vcxproj -> D:\visual studio\add\Debug\add.dll
動態調用DLL(僅需要DLL,不需要頭文件和LIB)
#include <iostream> #include <windows.h> using namespace std; typedef int(*FUN)(int, int);//定義指向和DLL中相同的函數原型指針 int main() { int x, y; HMODULE hDLL = LoadLibrary("D:\\visual studio\\add\\Debug\\add.dll");//加載dll if (hDLL != NULL) { FUN add = FUN(GetProcAddress(hDLL, "add"));//獲取導入到應用程序中的函數指針,根據方法名取得 if (add != NULL) { cout << "Input 2 Numbers:"; cin >> x >> y; cout << add(x, y) <<endl; } else { cout << "Cannot Find Function" << endl; } FreeLibrary(hDLL); } else { cout << "Cannot Find dll" << endl; } return 1; }
Input 2 Numbers:3 4 7 請按任意鍵繼續. . .
靜態調用(同時需要頭文件、LIB和DLL文件,缺一不可)
#ifndef __USEDll_H__ #define __USEDll_H__ extern "C" _declspec(dllimport) int add(int x, int y); #endif
#include "UseDll.h" #include <iostream> using namespace std; #pragma comment(lib,"D:\\visual studio\\UseDll\\Debug\\add.lib") int main() { int x, y; cout << "Input 2 Numbers:"; cin >> x >> y; cout << add(x, y) <<endl; }
Input 2 Numbers:10 10 20 請按任意鍵繼續. . .
靜態鏈接庫和動態鏈接庫