Nodejs:C++插件

官方文档:C++ 插件 | Node.js v18.16.1 文档 

配置文件:binding.gyp 

{
    'targets': [
        {
            'target_name': 'hello',
            'sources': [ 
                'src/hello.cc',
                'src/MyDLL01.dll',
            ]
        }
    ]
}

c++代码:

// hello.cc
#include <node.h>
#include "atlstr.h"
namespace demo {
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
// 动态调用DLL库
const char* DynamicUse()
{
    // 运行时加载DLL库
    HMODULE module = LoadLibraryA("MyDLL01.dll");
    if (module == NULL)
    {
        printf("加载MyDLL01.dll动态库失败\n");
        return "";
    }
    // 定义函数指针类型
    typedef const char*(*Func)();
    Func SaySuccess;
    // 导出函数地址
    SaySuccess = (Func)GetProcAddress(module, "SaySuccessStr");     // GetProcAddress返回指向的函数名的函数地址

    const char* str = SaySuccess();
    return str;
    //printf("%s", str);

}
//内部方法接口
void Method(const FunctionCallbackInfo<Value>& args) {
    const char* str=DynamicUse();
    Isolate* isolate = args.GetIsolate();
    args.GetReturnValue().Set(String::NewFromUtf8(isolate, str).ToLocalChecked());
}

//给传入的目标添加Method()方法
void Initialize(Local<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Method);
}
//调用NODE_MODULE()将注册方法定义到内存中
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)

}  // namespace demo

/*
编译C++:
需要node-gyp命令进行编译
1.node-gyp要和node版本一致
2.安装命令:npm install -g node-gyp
3.生成Makefile:node-gyp configure
4.编译:node-gyp build
(或者合并生成和编译:node-gyp configure build)

成功之后:当前目录内会有build\Release\hello.node文件
node文件其实就是动态库,linux下是so,windows下是dll
node.js v8引擎会使用dlopen的方式加载这个动态库。

node.js 调用:
{
    const hello = require('./build/Release/hello.node');
    console.log(hello.hello()); // 输出

}
调试:
node index.js
*/

JS调用:

const hello = require('./build/Release/hello.node');

console.log(hello.hello()); // 输出

// for Initialize2 第二种导出方式可以这么调用
// console.log(hello()); // Hello World!

//exports.sayHello=function(){
//    return "Hello!"
//}


//module.exports.hello = () => 'world';

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用C++开发VSCode插件的详细步骤: 1. 安装VSCode 首先,你需要安装VSCode,它是一个轻量级的代码编辑器,可以在https://code.visualstudio.com/上下载。 2. 安装C++扩展 在VSCode中,你需要安装C++扩展,这个扩展可以让你在VSCode中编写和调试C++代码。你可以在VSCode的扩展商店中搜索C++扩展,然后安装它。 3. 创建VSCode插件项目 接下来,你需要创建一个VSCode插件项目。在菜单栏中选择文件->新建文件夹,然后输入项目名称。然后在终端中使用命令“code .”打开VSCode,并在VSCode中选择文件->新建文件夹以打开你的项目文件夹。在终端中使用命令“npm init”创建一个新的npm项目。 4. 安装Node.js 在VSCode插件开发中,你需要使用Node.js,因此你需要在你的计算机上安装Node.js。你可以在https://nodejs.org/上下载并安装Node.js。 5. 安装Yo和Generator-code Yo和Generator-code是VSCode插件开发的工具。你可以在终端中使用以下命令安装它们: ``` npm install -g yo generator-code ``` 6. 创建插件 使用以下命令创建插件: ``` yo code ``` 在命令行中输入上述命令后,你会看到一个交互式的命令行界面,它将帮助你创建插件。在这个过程中,你需要输入一些信息,例如插件名称、描述、作者等。 7. 编写C++代码 在插件项目中,创建一个名为“src”的文件夹。在这个文件夹中,你可以创建一个C++文件,例如“hello.cpp”,并编写你的C++代码。 8. 在插件中调用C++代码 要在VSCode插件中调用C++代码,你需要使用Node.js的child_process模块。在你的插件中,创建一个JavaScript文件,并在这个文件中使用child_process模块来调用你的C++代码。例如,下面是一个调用hello.cpp的示例代码: ``` const { spawn } = require('child_process'); const ls = spawn('./hello', ['world']); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data', (data) => { console.error(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); }); ``` 9. 调试插件 最后,你需要调试你的插件。在VSCode中,你可以使用F5键来启动调试器,并调试你的插件。你可以使用调试器来检查你的C++代码是否正确运行,并查找任何错误。 以上就是使用C++开发VSCode插件的详细步骤。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值