Skip to content
rhcad edited this page Feb 4, 2012 · 6 revisions

如何加载插件

详细例子见 source/example/consoledemo/main.cpp,在此文件中有五种加载方式。

1、同时使用多个插件的简单加载方法

#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");

    // 可以使用接口了。。。
}

2、仅使用一个插件的简单加载方法

#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()
{
    // 可以使用接口了。。。
}

3、遍历目录下的所有插件

#include <nonplugin/scanplugins.h>

void yourFunction()
{
    // 默认遍历 plugins 目录,加载其中的插件文件
    x3::loadPlugins();

    // 可以使用接口了
    test();

    // 卸载所有插件,后加载的先卸载
    x3::unloadPlugins();
}

4、其他内容

此处不介绍另外两种不常用的加载方式(原生加载方式和静态链接库方式),具体例子见 source/example/consoledemo/main.cpp

使用 x3LoadLibraryx3FreeLibrary 函数来加载插件,而不是用LoadLibrary或LoadLibraryA,原因后者只能在Windows上才能使用。而使用x3LoadLibrary则同时适用于 Windows/Linux/MacOSX 等操作系统,对于Windows平台还对GCC编译方式进行了修正,这样确保能正常加载插件。

C++插件后缀名为 .pln ,而不是 .dll.so.plugin.dll ,其原因是在不同操作系统中用统一的后缀名,避免条件定义;同时避免与普通动态库混淆,这样遍历目录批量加载插件时可跳过普通动态库文件。

Clone this wiki locally