c++动态库导出类方法:

方法一:利用_declspec(dllexport)

这种简单导出类的方式,除了导出的东西太多,使用者对类的实现依赖太多之外,还有必须保证使用同一种编译器。

导出类的本质是导出类里面的函数,因为语法上直接导出了类,没有对函数的调用方式和重命名进行设置,导致了dll并不通用。

//导出C++类
class _declspec(dllexport) Stu
{
public:
	Stu(int id);
	void print();
private:
	int id;
};
#include "stdafx.h"
#include 
using namespace std;

#include "009.h"

Stu::Stu(int id)
{
	this->id=id;
}
void Stu::print()
{
	cout<<"id="<
#include 

#include "../009/009.h"
#pragma comment(lib,"../Debug/009.lib")

int main()
{
	Stu s(123);
	s.print();

	return 0;
}

方法二:较好的方式

定义一个抽象类(都是纯虚函数),调用者跟dll共用一个抽象类的头文件。DLL实现此抽象类的派生类。DLL最少只需要提供一个用于获取抽象类对象指针的接口。

#pragma once

//1、创建一个接口类
class IAnimal
{
public:
	virtual void eat()=0;
	virtual void sleep()=0;
	virtual void releaseObj()=0;
};

//2、创建一个导出函数
extern "C" _declspec(dllexport) IAnimal* GetCat();
// 010.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include 
using namespace std;

#include "010.h"

//1、创建导出类
class Cat:public IAnimal
{
public:
	Cat(int age)
	{
		this->age=age;
	}
	virtual ~Cat()
	{
		cout<<"Cat destroy!"<
#include 
using namespace std;

#include "../010/010.h"
#pragma comment(lib,"../Debug/010.lib")

int main()
{
	IAnimal* pCat=GetCat();
	pCat->eat();
	pCat->sleep();
	pCat->releaseObj();
	return 0;
}

C++的设计思想及多态类的实现思想的应用。

你可能感兴趣的:(编程语言,编程)