从dll导出嵌套类的方法

时间:2014-08-05 11:09:02

标签: c++ nested-class dllexport

我有* .cpp和* .hpp文件,其类具有以下结构:

第一个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项目而不会干扰嵌套类??

1 个答案:

答案 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的指针返回。