c++ - 共享对象 (DLL) 问题

标签 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 时,数据会被取消引用吗?

最佳答案

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

关于c++ - 共享对象 (DLL) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831551/

相关文章:

C# GetProcAddress 返回零

c++ - makefile 中的 patsubst 不会替换完整的文件路径

c++ - 如何在 char 数组中分配特定数量的字节 - 内存管理

javascript - Chrome 扩展仅适用于 "developer.chrome.com"

wordpress - 如何使ftp目录可写以更新wordpress插件?

c# - GAC 中的 Microsoft.SqlServer.Types.SqlGeography DLL

c# - 代码剥离错误 Unity

c++ - MPI 程序中的初始设置

c++ - 每个文件都有自己的静态变量拷贝吗?

scala - sbt 插件和使用插件本身的多项目构建中的项目之间相互交织的依赖关系