共享对象(DLL)问题

时间:2011-07-26 14:24:54

标签: c++ plugins dll g++ shared-libraries

我有一个关于共享对象(或DLL)的问题。我正在为我的游戏引擎开发一个插件加载器。不过,在开始这样做之前我需要回答一个问题。

如果我使用外部函数加载数据,我可以卸载我的共享对象吗?

这是一个小代码片段:

//The Plugin:
class PythonScriptingPlugin : public Plugin {
    void * system;
public:
    PythonScriptingPlugin() {
        system = new PythonScriptingSystem;     
    }

    void * get() { return system; } //derived

};

extern "C" {

    Plugin * libLoadPlugin() {
        return new PythonScriptingPlugin;

    }

}

//main app:
void * loadPlugin() {

    void * handle = dlopen(Base::fs()->file("plugins", "libPythonScriptingPlugin.so"), RTLD_LAZY | RTLD_GLOBAL);
    typedef (void*)(*loader)();
    loader * libLoadPlugin = dlsym(handle, "libLoadPlugin");

    void * data = libLoadPlugin()->get();
    dlclose(handle);
    return data;

}

当我调用dclose时,数据是否会被取消引用?

1 个答案:

答案 0 :(得分:2)

不,分配的内存仍然存在,但您无法从该插件/ dll调用任何函数。这使你的对象无用。