-
Notifications
You must be signed in to change notification settings - Fork 150
LoadPlugin
rhcad edited this page Feb 4, 2012
·
6 revisions
详细例子见 source/example/consoledemo/main.cpp,在此文件中有五种加载方式。
#include <portability/x3port.h> // 相当于#include<windows.h>
#include <nonplugin/useplugins.h> // 包含辅助加载类,一个工程内只能包含一次
void yourFunction()
{
// 多个插件文件名,以NULL结尾
const char* plugins[] = {
"x3manager.pln", "plsimple.pln", "observerex.pln", NULL
};
// 自动加载和卸载插件,插件在程序文件的plugins子目录下
x3::AutoLoadPlugins autoload(plugins, "plugins");
// 可以使用接口了。。。
}
#include <portability/x3port.h> // 相当于#include<windows.h>
// 插件在程序文件的plugins子目录下,如果不定义则插件与程序同目录
// 注意末尾有目录分隔符,在包含useplugin.h前定义,如果不定义则为默认的空串
#define PLUGIN_PATH "plugins/"
// 要使用的插件文件名,没有目录和后缀名(.pln)
#define PLUGIN_NAME "plsimple"
// 包含辅助加载类,一个工程内只能包含一次
#include <nonplugin/useplugin.h>
void yourFunction()
{
// 可以使用接口了。。。
}
#include <nonplugin/scanplugins.h>
void yourFunction()
{
// 默认遍历 plugins 目录,加载其中的插件文件
x3::loadPlugins();
// 可以使用接口了
test();
// 卸载所有插件,后加载的先卸载
x3::unloadPlugins();
}
此处不介绍另外两种不常用的加载方式(原生加载方式和静态链接库方式),具体例子见 source/example/consoledemo/main.cpp。
使用 x3LoadLibrary
和 x3FreeLibrary
函数来加载插件,而不是用LoadLibrary或LoadLibraryA,原因后者只能在Windows上才能使用。而使用x3LoadLibrary则同时适用于 Windows/Linux/MacOSX 等操作系统,对于Windows平台还对GCC编译方式进行了修正,这样确保能正常加载插件。
C++插件后缀名为 .pln
,而不是 .dll
、.so
、.plugin.dll
,其原因是在不同操作系统中用统一的后缀名,避免条件定义;同时避免与普通动态库混淆,这样遍历目录批量加载插件时可跳过普通动态库文件。