动态链接库的创建1

7 篇文章 0 订阅

1、动态链接库分为:Non-MFC DLL、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)

Non-MFC DLL文件

隐式调用:

2、创建工程win32 project,并选择 DLL 链接库。

3、在cpp文件中添加如下代码:

#include "stdafx.h"
#ifndef DYNAMIC_CPP
#define DYNAMIC_CPP
extern "C" int __declspec(dllexport) add(int x, int y)
{
	return x + y;
}
#endif


4、重新创建工程,进行测试:

#pragma comment(lib, "..\\dynamic\\Debug\\dynamic.lib")
extern "C" int add(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
	printf("2 + 3 = %d\n",add(2,3)); 
	return 0;
}

 

显示调用:
 

 5、修改main函数中调用,如下:

 

typedef int (*lpAddFun)(int , int);//定义函数指针
int _tmain(int argc, _TCHAR* argv[])
{
	HINSTANCE hDLL;//dll 句柄
	lpAddFun addFun;//定义函数指针
	hDLL = LoadLibrary(L"dynamic.dll");
	if(hDLL == NULL)
	{
		printf("load failure\n");
	}
	addFun = (lpAddFun)GetProcAddress(hDLL,"add");
	if(addFun == NULL)
	{
		printf("get function address failure\n");
	}
	printf("2 + 3 = %d\n",(*addFun)(2,3)); 
	FreeLibrary(hDLL);

	return 0;
}
}

 首先,语句typedef int ( * lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例addFun;

其次,在函数main中定义了一个DLL HINSTANCE句柄实例hDll,通过Win32 Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll;

再次,在函数main中通过Win32 Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLL中add函数的调用;

最后,应用工程使用完DLL后,在函数main中通过Win32 Api函数FreeLibrary释放了已经加载的DLL模块。

http://pcedu.pconline.com.cn/empolder/gj/vc/0509/699672_1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值