在C++中编写Node.js的扩展模块可以通过使用Node.js提供的N-API(Native Application Programming Interface)来实现。下面是一个基本的示例:
- 创建一个包含扩展模块功能的C++源文件,例如
addon.cpp
。
#include <node_api.h>
napi_value Method(napi_env env, napi_callback_info info) {
napi_status status;
napi_value greeting;
status = napi_create_string_utf8(env, "Hello from C++!", NAPI_AUTO_LENGTH, &greeting);
if (status != napi_ok) {
napi_throw_error(env, nullptr, "Failed to create string");
return nullptr;
}
return greeting;
}
napi_value Init(napi_env env, napi_value exports) {
napi_status status;
// 导出"hello"函数
napi_value fn;
status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);
if (status != napi_ok) {
napi_throw_error(env, nullptr, "Failed to create function");
return nullptr;
}
// 将导出的函数命名为"hello"
status = napi_set_named_property(env, exports, "hello", fn);
if (status != napi_ok) {
napi_throw_error(env, nullptr, "Failed to set named property");
return nullptr;
}
return exports;
}
NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
- 创建一个
binding.gyp
文件来描述编译和链接C++源文件的规则。
{
"targets": [
{
"target_name": "addon",
"sources": [ "addon.cpp" ]
}
]
}
- 使用Node.js提供的
node-gyp
工具来构建扩展模块。
$ node-gyp configure
$ node-gyp build
- 在JavaScript中使用扩展模块:
const addon = require('./build/Release/addon');
console.log(addon.hello()); // 输出: Hello from C++!
这是一个简单的示例,你可以在C++源文件中添加更多功能并根据需要进行配置。有关更详细的信息和高级用法,请参考Node.js的官方文档和N-API文档。
内容由零声教学AI助手提供,问题来源于学员提问