如何在dll导出的类中隐藏成员变量
How to hide member variables in a dll-exported class
我想在dll文件中导出一个1024字节的类。
class __declspec(dllexport) ExportedClass
{
private:
char Data[1024]; // Holding 1024 bytes.
public:
void Foo();
};
所以,当我把这个类的头文件提供给我的客户端时,我想隐藏它的成员变量,在这种情况下是charData[1024]。
class __declspec(dllimport) ExportedClass
{
private:
// char Data[1024]; // You don't have to know.
public:
void Foo();
};
然而,如果没有数据的定义,堆栈内存中就没有1024字节的分配,这最终会导致访问冲突。
int main()
{
ExportedClass Obj; // The compiler thinks Obj has no variables to allocate.
Obj.Foo(); // Crushes because Data points to some invalid space.
return 0;
}
有没有一种方法可以不显式地告诉编译器类的大小,但也可以告诉它在应该从dll文件导入类时的行为?
我已经使用Visual Studio 2013 Update 3测试了此代码。
提前谢谢。
如果不想显示成员,只需创建一个要公开的方法的Interface
,然后将该接口提供给DLL用户。
您必须创建一个工厂方法来在dll中创建类,然后只返回一个指向接口的指针。
另一个有趣的事实是:如果所有的方法都是虚拟的,你甚至不必用declspec导出它们
虚拟查找表负责为程序提供指向方法的实际指针。
相关文章:
- 使用函数参数隐藏成员函数
- C++继承模板类:隐藏成员变量
- pImpl、范围和隐藏数据成员
- 有选择地隐藏类成员的成员
- 共享类时如何隐藏成员功能文件
- 隐藏的成员变量不应在仅允许const访问的基类中突变,以便保留分配运算符
- 在继承的类构造函数中使用隐藏成员
- 视觉C++:即使使用关键字,参数声明也会隐藏类成员"this"
- c 中的名称隐藏式成员功能:良好实践
- C 如何使用隐藏的默认构造函数初始化成员
- 隐藏PIMPL-Objects拥有的成员的实现
- 成员模板模板参数的隐藏
- 编译器不应该对派生类中隐藏的基本结构的成员变量发出警告吗?
- 是否应隐藏所有数据成员
- 隐藏C++成员函数的原因
- VS2012 - 类界面设计:私有成员函数定位/隐藏
- 有关隐藏超类成员的问题
- 如何在不授予私有成员访问权限的情况下隐藏 C++ 中的 STL 函子结构
- 如何在dll导出的类中隐藏成员变量
- 在模板类中隐藏成员函数