以下内容是一个在Windows环境下的程序中加载动态库的示例。
环境:vs
1.生成动态库
在vs中建立一个项目,使用下面的代码生成一个动态库WinDll.dll。项目建立后在项目的属性->C/C++预处理器中添加预处理宏WIN_DLL_EXPORTS,这个在WinDll.h文件中使用。
//WinDll.h
#ifndef WIN_DLL_H_
#define WIN_DLL_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifdef WIN_DLL_EXPORTS
#define WIN_DLL_API __declspec(dllexport)
#else
#define WIN_DLL_API __declspec(dllimport)
#endif
WIN_DLL_API int add(int a, int b);
WIN_DLL_API int sub(int a, int b);
#ifdef __cplusplus
}
#endif
#endif
===========================================================
//WinDll.cpp
#include "WinDll.h"
int add(int a, int b){
return a + b;
}
int sub(int a, int b){
return a - b;
}
2.在程序中动态加载动态库,调用其中的函数
将生成的WinDll.dll动态库引入新建的项目中,在程序中通过调用相关函数动态加载。
//main.cpp
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include "WinDll.h"
using namespace std;
int main(){
typedef int(*pAdd)(int, int);
//HMODULE hMoudle = LoadLibrary(_T("../bin/WinDll.dll"));
HMODULE hMoudle = LoadLibraryA("../bin/WinDll.dll");
if (hMoudle == NULL || hMoudle == INVALID_HANDLE_VALUE){
FreeLibrary(hMoudle);
return -1;
}
pAdd add = (pAdd)GetProcAddress(hMoudle, "add");
if (add == NULL){
FreeLibrary(hMoudle);
return -1;
}
std::cout << add(1, 2) << std::endl;
FreeLibrary(hMoudle);
return 0;
}