我有* .cpp和* .hpp文件,其类具有以下结构:
class FirstClass{
public:
FirstClass();
~FirstClass();
SHORT FirstMethod(arguments ...);
void SecondMethod(arguments ...);
ULONG thirdMethod(arguments ...);
....
void lastMethod();
private:
std::list<std::string> STLStringList;
};
我尝试从DLL导出我的主类,并使用我的嵌套类(类FirstClass)中的函数。我创建了具有以下结构的主类:
#ifdef MAINCLASSDLL_EXPORTS
#define MAINCLASS_API __declspec(dllexport)
#else
#define MAINCLASS_API __declspec(dllimport)
#endif
// This class is exported from the MainClassDll.dll
class MAINCLASS_API MainClassDll{
public:
MainClassDll();
// Methods from class FirstClass
virtual SHORT FirstMethod(arguments ...);
virtual void SecondMethod(arguments ...);
virtual ULONG thirdMethod(arguments ...);
....
virtual void lastMethod();
};
extern "C"{
MAINCLASSDLL_API MainClassDll *CreateObject();
MAINCLASSDLL_API void DestroyObject(MainClassDll *pobjMainClassDll );
}
方法表单FirstClass使用私有STLStringList,并且所有方法必须使用FisrtClass的相同对象。我尝试创建导出指向FirstClass对象的指针的方法但是当我尝试使用这种方法时,我的程序崩溃了。我无法改变FirstClass的结构。 可能是从我的嵌套类中使用的方法创建DLL项目而不会干扰嵌套类??
答案 0 :(得分:0)
在我看来,你希望DLL中的大多数FistClass
类是私有的,作为一种内部结构,但仍然从中导出一些函数。这可以通过继承来解决:您将公共MainClassDLL
设为抽象基类,然后让FirstClass
继承自MainClassDLL
。
像
这样的东西struct MainClassDLL
{
virtual SHORT FirstMethod(arguments ...) = 0;
virtual void SecondMethod(arguments ...) = 0;
virtual ULONG thirdMethod(arguments ...) = 0;
....
virtual void lastMethod() = 0;
virtual ~MainClassDLL() {}
};
// In private header file
class FirstClass : MainClassDLL
{
public:
FirstClass();
virtual ~FirstClass();
SHORT FirstMethod(arguments ...);
void SecondMethod(arguments ...);
ULONG thirdMethod(arguments ...);
....
void lastMethod();
private:
// Private data
};
然后CreateObject
函数只创建FirstClass
的实例并将其作为指向MainClassDLL
的指针返回。