Экспорт методов вложенных классов из dll

У меня есть файлы * .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 для используемых методов из моего вложенного класса, не мешая вложенному классу?

0

Решение

Мне кажется, что вы хотите большую часть FistClass Класс private внутри DLL, как своего рода внутренняя структура, но все же экспортирует некоторые функции из нее. Это можно решить с помощью наследства: вы делаете публичным 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,

0

Другие решения


По вопросам рекламы [email protected]