在程序中动态加载动态库(win)

以下内容是一个在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;
}

 

 

 

 

仰天大笑出门去 我辈岂是蓬蒿人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值