vs2017创建dll并调用

1.动态链接库的创建

直接按图片的顺序一步一步来即可

vs2017创建dll并调用

vs2017创建dll并调用

vs2017创建dll并调用

//dllTest.h
#pragma once
#ifdef dllTest_EXPORTS
	#ifdef __GNUC__
		#ifndef __linux__
			#define DLL_TEST_API __attribute__((dllexport))
		#else
			#define DLL_TEST_API __attribute__((visibility("default")))
		#endif
	#else
		#define DLL_TEST_API __declspec(dllexport)
	#endif
#else
	#ifdef __GNUC__
		#ifndef __linux__
			#define DLL_TEST_API __attribute__((dllimport))
		#else
			#define DLL_TEST_API __attribute__((visibility("default")))
	#endif
	#else
		#define DLL_TEST_API
	#endif
#endif

namespace dllTest
{
	//定义整个类都是dll导出函数
	class DLL_TEST_API CTest
	{
	public:
		CTest();
		CTest(int a, int b)
		{
			m_index1 = a;
			m_index2 = b;
		}

		int Add(int a, int b);
	private:
		int m_index1;
		int m_index2;
	};

	//__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,
	//加入extern "C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们
    /*
    总结:
    1.extern "C"表示编译生成的内部符号名使用C约定。
    2.C++支持函数重载,而C不支持,两者的编译规则也不一样,函数被C++编译后在符号库中的名字与C语言    的不同。
    例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不 同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。
    */
	#ifdef __cplusplus
	extern "C"
	{
	#endif
		DLL_TEST_API void Test();
	#ifdef __cplusplus
	}
	#endif

}
//dllTest.cpp
#include "dllTest.h"
#include <iostream>

dllTest::CTest::CTest()
{
	m_index1 = 0;
	m_index2 = 0;
}

int dllTest::CTest::Add(int a, int b)
{
	return a + b;
}

void dllTest::Test()
{
	std::cout << "Test" << std::endl;
}

在属性页-->"c/c++"---->"预处理器"中将上述代码中的dllTest_EXPORTS加入到预处理器定义中

vs2017创建dll并调用

编译生成就可以得到dll和lib

vs2017创建dll并调用

2.动态库的调用

创建dllTest_test的项目来调用上面创建的dll,将dllTest的头文件和lib、dll放在3rdparty中,供调用使用

vs2017创建dll并调用

vs2017创建dll并调用

vs2017创建dll并调用

//dllTest_test.cpp
#include <iostream>
#include "dllTest.h"

int main()
{
	dllTest::CTest test;
	std::cout << test.Add(1, 2)<<std::endl;

	dllTest::Test();
}

vs2017创建dll并调用

 

上一篇:VS2017+caffe+GPU 错误LNK1104 无法打开文件“libboost_date_time-vc140-mt-1_59.lib”


下一篇:qt+vs2017环境搭建