2015-11-30 1 views
0

Я работаю с DLL, и я новичок в нем. Я пытаюсь загрузить производный класс наследуется от моего интерфейсаЗагрузка производного класса из DLL не содержит производных атрибутов

class IModule{ 
public: 
    virtual ~IModule(); // <= important! 
    vector<String> getFunctions(); 


protected: 
    vector<String> mFunctions; 
}; 

class DllModule : public IModule { 
public: 
    DllModule() { 
     this->mFunctions.push_back("Algorythm"); 

    }; 
private: 
    int test; 
}; 

и здесь я хочу послать указатель моего приложения

extern "C" { 
    IModule* CreateModule() { 
     // call the constructor of the actual implementation 
     IModule * module = new DllModule; 
     // return the created function 
     return module; 
    } 
} 

В моем приложении после того, как я загрузить его

f_GetFunctions funci = (f_GetFunctions)GetProcAddress(hGetProcIDDLL, "CreateModule"); 
    if (!funci) { 
     std::cout << "Could not locate function CreateModule" << std::endl; 
     //return EXIT_FAILURE; 
     return nullptr; 
    } 
    IModule* module = funci(); 

I ожидаем, что mFunction заселен, но это похоже на новый экземпляр IModule вместо DllModule, загруженного из DLL. Все, что я хочу, это цикл в mFunctions и заполнение моего combobox в QT_App.

Может кто-нибудь мне помочь? Что случилось с моими ожиданиями?

спасибо.

(Все это делается в Windows 10)

Edit1: Изменены типы к минимальной (извините за это) Функция => Строка

Edit2: Я укомплектовать забыл о назначении указатель

+0

Что такое 'Функция'? Это псевдоним для строкового типа? –

+0

Общая структура выглядит нормально, но это определенно не минимальный пример кода, там уже есть некоторые загадочные типы. Простой тест с одним целочисленным атрибутом, который устанавливается в конструкторе. –

+0

Я отредактировал его немного. Изменен тип Функция для строки. И вместо возврата funci(); вставил задание. –

ответ

0

Мне удалось обойти мою проблему. Я использовал QLibrary.Load() вместо LoadLibraryA и сделал именно то, что хотел.

Смежные вопросы