这一篇才正式进入正题,怎么导出类和开发API?
其实导出类很简单,如下:
//CTest.h
#pragma once
#include "DLL.h"
class API CTest
{
public:
CTest(int* _buf,int _size);
~CTest();
int* Reverse();
static int InstanceCount;
private:
int* m_rawbuf,*m_outbuf;
int m_bufCount;
};
在class和CTest之间加上导出关键字API就行了。其他代码请看上一篇文章。然后把APISLN中的CTest.cpp文件去掉,就可以实现CTest的类导出了。
请看导出类以后的运行结果:
静态变量InstanceCount的计数统一了起来。
但是,这并不是好的导出形式。就这个问题上我曾经和公司前主管讨论过,他觉得导出类会暴露太多接口,所以他认为类不应该导出,就是该互相传送指针使用,分别编译。分别编译的弊端我在上一篇已经解释过了。至于暴露接口的问题确实存在,比如上面我实际上只想告诉你public的接口,但我既然给了你头文件,那么我的private和protected等一系列内部接口都暴露出来了。
所以这就引出一个新的概念API,以及另一种导出类的形式virtual导出。
先看看一个正确导出API的代码结构: