0

我已经为 Node.JS 编写了一个测试插件(一个非实例化的小 hello world 应用程序),现在我正在使用可插件的插件。我目前正在尝试创建一个插件,该插件可以访问 hello world 插件的功能,以及 hello world 调用插件主机插件并注册存在。

到目前为止,我能确定的唯一方法是让 .js 文件需要两个插件,然后调用 Hello World 插件进行注册,然后调用插件主机。所以,简而言之,编码看起来像:

var host = require('./pluginHost');
host.registerPlugin(require('./helloWorldPlugin').plugin());
host.registerPlugin(require('./fooBarBazPlugin').plugin());
host.registrationComplete();

实际上,可能会有更多的配置代码,但目前这更像是一个概念。所以,给定上面的代码,加上pluginHost插件代码,我怎么能从那个对象访问和下载信息。请记住,被解析为 的代码的插件部分pluginHost将是一个静态函数集合,其中包含有关其他可用对象和类的信息以及 thepluginHost和 other之间的主线 IPC plugins

4

1 回答 1

0

Righto,发现了如何做到这一点

C++:

Handle<Value> registerPlugin(const Arguments &args) {
    HandleScope scope;
    Handle<Object> This = args.This();
    Handle<Context> context = Context::New();
    Handle<Object> object = This->Get(String::New("ObjectValueIWantKey"))->ToObject();

    if (object == Undefined()) {
        return Undefined();
    }

    Handle<Value> functionName = object->Get(String::New("SomeFunctionName"));
    if (functionName->IsFunction()) {
        Handle<Function> function = Handle<Function>::Cast(functionName);
        Handle<Value> fargs[1] = { String::New("ARG") };
        Handle<Value> methodResult = function->Call(object, 1, fargs);
    }

    Handle<Value> variableResult = object->Get(String::New("SomePropertyName"));

    ...
}

在此示例中,通过调用host.registerPlugin(require('./pluginObject'))将允许pluginHost库与其交互,并将其包含在其他系统中。

于 2013-07-03T15:18:52.057 回答