Я работаю с 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: Я укомплектовать забыл о назначении указатель
Что такое 'Функция'? Это псевдоним для строкового типа? –
Общая структура выглядит нормально, но это определенно не минимальный пример кода, там уже есть некоторые загадочные типы. Простой тест с одним целочисленным атрибутом, который устанавливается в конструкторе. –
Я отредактировал его немного. Изменен тип Функция для строки. И вместо возврата funci(); вставил задание. –