呼叫C++;Node.js中的库(节点插件/节点ffi) 我试图将一个外部C++库(我可以访问.so文件以及头文件)集成到我的NoDE.js应用程序中。p>

呼叫C++;Node.js中的库(节点插件/节点ffi) 我试图将一个外部C++库(我可以访问.so文件以及头文件)集成到我的NoDE.js应用程序中。p>,node.js,node.js-addon,node-ffi,Node.js,Node.js Addon,Node Ffi,经过大量研究,我的选择减少到: 写一篇 使用 从节点FFI的GITHUB定义中,我不能判断它是否将直接或不直接在C++库上工作: node ffi是一个node.js插件,用于使用纯JavaScript加载和调用动态库。它可以用来创建绑定到本地库而不编写任何C++代码。 因此,我的问题是: < LI>选项1)是否意味着以某种方式改写外部C++库? 是节点FFI,它可以直接调用C++库而不需要编写任何一个C包装器? 在C/C++方面我不是专家,所以如果我遗漏了一些基本的问题,请告诉我,这样我可

经过大量研究,我的选择减少到:

  • 写一篇

  • 使用

  • 从节点FFI的GITHUB定义中,我不能判断它是否将直接或不直接在C++库上工作:

    node ffi是一个node.js插件,用于使用纯JavaScript加载和调用动态库。它可以用来创建绑定到本地库而不编写任何C++代码。 因此,我的问题是:

      < LI>选项1)是否意味着以某种方式改写外部C++库?<李>
    • 是节点FFI,它可以直接调用C++库而不需要编写任何一个C包装器?

    在C/C++方面我不是专家,所以如果我遗漏了一些基本的问题,请告诉我,这样我可以改进我的问题。

    节点ffi似乎主要用于C程序。我在上周经历了这一过程,发现节点插件的运气要好得多。你要做的是在库中的C++代码和NoDE.js之间编写一个垫片。在我的例子中,我需要对一个安全协议进行编码和解码,因此我制作了包含这些数据包的节点缓冲区,并编写了将数据从缓冲区中取出的C++代码,然后将数据发送到编码和解码包的C代码。p>

    页面:有一些很棒的例子,如何在C++中获取和输出NoDE.js缓冲区的数据。我很乐意帮忙。上面的代码示例是用C++编写的。我正在说明人们(用C或C++制作库)是如何定义外部接口供其他人使用的。ffi的要点是,您可以使用任何语言(在本例中为javascript)编写包装,而不是使用C/C++(在节点扩展的情况下)。如果您的原始库是一个用于其他用途的共享DLL,它已经有了一个接口,您只需用javascript编写包装代码来告诉节点它是如何工作的,而不是用C++编写一些东西,并将它暴露在原生的NoDEJS库中。

    现在使用外部C++库编写No.js AdOnSon更容易。基本上,您可以创建一个新的源文件,包括库头、nbind头和一些列出库的类和方法的宏调用。然后nbind处理其余的事务


    是一个使用nbind调用Node.js中的本机小部件生成用户界面的真实示例。还有一个关于如何创建生物信息学相关的C++库的绑定。

    < P>有很简单的方法链接你的库(<代码>。所以.dll。< /COD>)。您应该在
    binging.gyp
    文件中添加具有正确路径的库:

    {
      "targets": [
        {
          "target_name": "addon",
          "sources": [ "hello.cc" ],
          "libraries": [
                "path/toYourLibrary/yourLibName.dll or yourLibName.so"
              ] 
        }
      ]
    }
    

    使用
    nan
    还有更简单的方法来编写好的插件。检查链接更多信息< /p>有一个类似的问题:但是我认为它不能完全回答我的问题。FFI与C++一起工作,只需使用“外部”C来定义你的LIB接口(就像你用C++编写的任何东西一样,也可以用C来消耗)有关详细信息,请参见。您可以在此处找到信息,这是包装sqlite的几个方法的示例。LIB是C或C++的事实是无关的,只是它定义了一个接口(就像所有的共享库一样)。