从DLL加载派生类时不包含派生属性

Loading derived class from DLL does not contain derived attributes

本文关键字:派生 包含 属性 DLL 加载      更新时间:2023-10-16

我正在使用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();

我希望mFunction被填充,但它类似于IModule的新实例,而不是从DLL加载的DllModule。我只想在mFunctions中循环并在QT_App中填充我的组合框。

有人能帮我吗?我的期望有什么问题?

非常感谢。

(一切都在Windows10中完成)

第1版:已将类型更改为最小类型(很抱歉)函数=>字符串

第2版:我完全忘记了分配指针

我能够解决我的问题。我使用QLibrary.Load()而不是LoadLibraryA,它正是我想要的。