C++ 从c+;重复调用node.js函数+;

C++ 从c+;重复调用node.js函数+;,c++,node.js,v8,C++,Node.js,V8,我试图设置一个C++应用程序,它应该能够调用NoDE.js模块的一个函数。 虽然我能找到如何为NoDE.js创建C++插件的示例代码,也有一些关于如何从C++调用V8代码的例子,但我没有运行过类似于从C++ ++中调用NoDE.js函数的方法。 我想理想的方法是 设置node.js环境,例如一次编译所有必要的模块 当C++应用程序需要调用一个可用参数的“可用”NoDE.js函数时,调用一个 读取并处理函数的返回值 理想的是,NoDE.js代码和C++代码运行在同一进程上下文中,因此不必在某些

我试图设置一个C++应用程序,它应该能够调用NoDE.js模块

的一个函数。 虽然我能找到如何为NoDE.js创建C++插件的示例代码,也有一些关于如何从C++调用V8代码的例子,但我没有运行过类似于从C++ ++中调用NoDE.js函数的方法。 我想理想的方法是

  • 设置node.js环境,例如一次编译所有必要的模块
  • 当C++应用程序需要调用一个可用参数的“可用”NoDE.js函数时,调用一个
  • 读取并处理函数的返回值

理想的是,NoDE.js代码和C++代码运行在同一进程上下文中,因此不必在某些流抽象类型上对参数进行参数化和返回值。 欢迎所有提示

德克萨斯州


彼得

我终于设法做了些事情

我最努力的是如何处理节点/V8事件循环,以便在调用JavaScript函数时启动,但在JavaScript函数完成后停止,从而调用C++方法继续…基本上等待所有节点异步处理完成。

我所做的是编辑一个C++类,它沿着

行。
  • 首先初始化节点,就像node.cc方法node::Init和node::Start中一样,并传入一个指向定义我要调用的函数的节点脚本的参数

  • < P>然后在节点的全局命名空间中登记C++函数,JavaScript函数将使用它作为最终回调。差不多

    v8::Locker locker;
    v8::HandleScope handle_scope;
    v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
    global->Set(v8::String::New("functionCallback"), v8::FunctionTemplate::New(fnCallback,v8::External::Wrap(this)));
    
  • 然后,此回调(c++)将存储结果并终止事件循环

    static v8::Handle<v8::Value> fnCallback(const v8::Arguments& args) {
    ...
    // Stop node event loop so that the "calling" app continues (loop is started in execFn)
    uv_stop(uv_default_loop());
    ...
    
    staticv8::handlefncallback(constv8::Arguments和args){
    ...
    //停止节点事件循环,以便“调用”应用程序继续(循环在execFn中启动)
    uv_停止(uv_默认_循环());
    ...
    
<>我意识到这有点简洁。如果有人感兴趣,我可以共享C++类,但是我的C++/V8/节点知识非常有限,所以我不想把它完全发布


彼得< /P>这似乎是几个问题。你想知道如何调用一个函数,或者你想让我们为你写一个模块吗?很乐意做第一个,但是没有人会写一个没有启动代码的整个模块。谢谢你的反应。我想创建一个独立的C++应用程序,它与NoDE.js对象文件链接。因此,可以从该独立应用程序中加载node.js脚本,从而在node.js模块中实现功能可以执行任何提示,比如指针,类似于类似代码的例子,这是有帮助的。我当然不希望有人写代码,但是要想办法解决这个问题,我会很感激。Tx. Peter。我会对C++类感兴趣。请你给我发电子邮件。

global.functionCallback(result);
static v8::Handle<v8::Value> fnCallback(const v8::Arguments& args) {
...
// Stop node event loop so that the "calling" app continues (loop is started in execFn)
uv_stop(uv_default_loop());
...