我想在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测试了此代码。
谢谢你。
答案 0 :(得分:3)
如果您不想显示成员,那么只需创建要公开的方法的Interface
,然后将该接口提供给DLL用户。
你必须创建一个factory方法来在你的dll中创建类,然后只返回一个指向接口的指针。
另一个有趣的事实:如果所有方法都是虚拟的,你甚至不必用declspec导出它们 虚拟查找表负责为程序提供指向方法的实际指针。