У меня есть вопрос относительно общих объектов (или 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?