如何在dll导出的类中隐藏成员变量

时间:2014-09-14 06:46:01

标签: c++ dll

我想在dll文件中导出一个1024字节的类。

class __declspec(dllexport) ExportedClass
{
private:
    char Data[1024]; // Holding 1024 bytes.
public:
    void Foo();
};

所以, 当我将这个类的头文件提供给我的客户时,我想隐藏其成员变量,在这种情况下为char [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测试了此代码。

谢谢你。

1 个答案:

答案 0 :(得分:3)

如果您不想显示成员,那么只需创建要公开的方法的Interface,然后将该接口提供给DLL用户。

你必须创建一个factory方法来在你的dll中创建类,然后只返回一个指向接口的指针。

另一个有趣的事实:如果所有方法都是虚拟的,你甚至不必用declspec导出它们 虚拟查找表负责为程序提供指向方法的实际指针。