动态链接库DLL的两种调用方式20190906

方式一:.h + .lib + .dll 方式

.h 和 .lib 编译时需要

.lib 运行时需要

.h头文件包含dll中说明输出的类或符号原型或数据结构。

.lib文件 引入库文件,包含被DLL导出的函数的名称和位置,在应用程序的可执行文件中,存放的不是被调用函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行时再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。

.dll 包含实际的函数和数据,发布时只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。

#include <iostream>
using namespace std;

#include "../004/004.h"
/* extern "C" _declspec(dllimport) int sum(int a,int b)*/
#pragma comment(lib,"../Debug/004.lib")


int main()
{
	int result = sum(10,11);

	cout<<"result="<<result<<endl<<endl;

	return 0;
}

方式二:使用Win32 Api + .dll方式进行

LoadLibrary();

GetProcAddress();

FreeLibrary();

HMODULE WINAPI LoadLibrary(_In_LPCWSTR_IpLibFileName);

参数:

IpLibFileName:动态链接库的名称

返回值:

成功则返回库模块的句柄,失败则返回0。

FARPROC WINAPI GetProcAdress(HMODULE hModule, LPCSTR IpProcName);

参数:

hModule :DLL模块句柄

IpProcName:函数名或者序号值。

返回值:

成功者返回 DLL中输出的函数地址。失败返回NULL。

int main()
{
	//方式2:使用Win32API+.DLL

	//1、加载DLL
	HMODULE h=LoadLibrary("004.dll");
	//2、构造函数指针
	typedef int (*PSUM) (int,int);//
	//3、利用函数指针调用函数
	/*PSUM psum =(PSUM)GetProcAddress(h,"sum");*///利用函数名
	PSUM psum =(PSUM)GetProcAddress(h,(char*)1);//利用函数序号
	cout<<psum(11,22)<<endl<<endl;
	//4、释放DLL
	FreeLibrary(h);
	return 0;
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值