VC++静态库以及动态库编程以及使用

VC++程序开发中,我们经常要用到自己开发的或者第三方的静态库或者动态库。

1.静态库使用,我们可以使用自己编译的lib库或者第三方lib库,只要把lib文件和头文件放在当前工程,lib文件可以通过#pragma comment(lib,"DLLTest.lib")或者通过vs编辑器工程属性的方式加载,使用lib库时生成.exe文件时,不需要依赖其他文件,会把lib文件编译进exe文件,这样生成的.exe文件就会偏大。

2.动态dll的使用,这里主要讲自己编写的DLL使用,VC++中我们可以把一些大的独立的功能模块编译生产DLL,亦可以把这些DLL使用在其他的工程,这里我们以一个求和的函数为例子。

a)实现讲下静态加载dll的方法,新建一个工程,添加文件

//addNum.h

extern "C" __declspec(dllexport) int addNum(int a,int b);

//addNum.cpp
#include "AddNum.h"

int addNum(int a,int b)
{
	return a + b;
}


项目属性设置编程生DLL文件

  


























然后新建一个工程使用这个dll,这里不要引入头文件,代码为:

#include <stdio.h>
#include <Windows.h>
//#include "AddNum.h"
#include <string>
#include <iostream>

using namespace std;

//#pragma comment(lib,"DLLTest.lib")

//extern "C" __declspec(dllimport) int addNumInt(int x,int y); 

typedef int (*FUCADDNUM)(int a,int b);
FUCADDNUM pAddNum = NULL;

string addString()
{
	string tmp;
	tmp += "Hello";
	return tmp;
}

int main()
{
	HMODULE m_hModule = ::LoadLibrary("E:\\LearnWorkPlace\\DLLTest\\Debug\\DLLTest.dll");
	pAddNum = (FUCADDNUM)::GetProcAddress(m_hModule, "addNum");

	int tmp = pAddNum(1,2);

	//int tmp = addNumInt(2,5);
	cout<<addString()<<endl;

	//int tmp = addNum(2,6);

	printf("addNum: %d\n",tmp);

	return 0;
}
这里需要定义函数指针。

b)运行时动态加载dll,代码为:

#include <stdio.h>
#include <Windows.h>
//#include "AddNum.h"
#include <string>
#include <iostream>

using namespace std;

#pragma comment(lib,"DLLTest.lib")

extern "C" __declspec(dllimport) int addNum(int x,int y); 

//typedef int (*FUCADDNUM)(int a,int b);
//FUCADDNUM pAddNum = NULL;

string addString()
{
	string tmp;
	tmp += "Hello";
	return tmp;
}

int main()
{
	//HMODULE m_hModule = ::LoadLibrary("E:\\LearnWorkPlace\\DLLTest\\Debug\\DLLTest.dll");
	//pAddNum = (FUCADDNUM)::GetProcAddress(m_hModule, "addNum");

	//int tmp = pAddNum(1,2);

	//int tmp = addNumInt(2,5);
	cout<<addString()<<endl;

	int tmp = addNum(2,6);

	printf("addNum: %d\n",tmp);

	return 0;
}

这里在不需要头文件时,我们需要自己申明extern "c" __declspec(dllimport) int addNum(int x,int y)才能使用,需要把dll放在EXE目录,不然运行不了,也需要主动连接lib。如果不主动声明,需要包含头文件,DLLMain函数没自己写的话,系统自动会默认生产DLLMain。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值