通过C&x2B+;对象到C++;Nodejs/V8扩展中通过Javascript实现的函数
我试图包装一个C++函数,它将一个对象作为输入,以便通过NoDEJS访问。这里有一个简单的例子来说明我正在尝试做什么通过C&x2B+;对象到C++;Nodejs/V8扩展中通过Javascript实现的函数,javascript,c++,node.js,v8,cvv8,Javascript,C++,Node.js,V8,Cvv8,我试图包装一个C++函数,它将一个对象作为输入,以便通过NoDEJS访问。这里有一个简单的例子来说明我正在尝试做什么 在C++中, struct query { string m_foo; string m_bar; query(string foo, string bar) :m_foo(foo), m_bar(bar) {} } static string ExecuteQuery(query q); // Implemented somewhere 在Javascr
在C++中,
struct query {
string m_foo;
string m_bar;
query(string foo, string bar)
:m_foo(foo), m_bar(bar) {}
}
static string ExecuteQuery(query q); // Implemented somewhere
在Javascript(node.js)中,我希望能够
var q = new plugin.query("foo", "bar");
var result = plugin.ExecuteQuery(q);
<>所有我发现的NoDEJS C++插件例子都是用简单的数据类型和非常简单的例子来处理的。这样做有什么好的例子或模式吗?由于缺少v8文档和制作插件的繁琐/冗长语法,我自己在这方面运气不太好
需要,
- 在JavaScript 中创建C++对象的能力
- 能够通过Javascript将这些对象传递给需要它们的方法或静态函数
也有什么比V8 Cuff/CV8更简单的方法来简化C++库的过程,以便通过节点.js?
< p>访问。这取决于你使用的浏览器,但是大多数C++和JavaScript之间的互操作是通过COM来实现的。 < P> <强>节点画布< /强> 在TJ HooWayZuk中,在C++中显示了对象包装实例,以在JavaScript方面传递和使用。 我将在下面摘录一个例子与您分享它是如何完成的 从 从 来自有关ObjectWrap的解释,请参见。Node.js是一个服务器端JavaScript环境,与浏览器无关。可以像boost.python一样使用boost.js。你可以用SWIG来做。有些人似乎喜欢SWIG,但我更喜欢boostpython中的控件。
class Image: public node::ObjectWrap {
Persistent<FunctionTemplate> Image::constructor;
...
Handle<Value>
Image::New(const Arguments &args) {
HandleScope scope;
Image *img = new Image;
img->data_mode = DATA_IMAGE;
img->Wrap(args.This());
return args.This();
}
class Canvas: public node::ObjectWrap {
Handle<Value>
Canvas::New(const Arguments &args) {
HandleScope scope;
int width = 0, height = 0;
canvas_type_t type = CANVAS_TYPE_IMAGE;
if (args[0]->IsNumber()) width = args[0]->Uint32Value();
if (args[1]->IsNumber()) height = args[1]->Uint32Value();
if (args[2]->IsString()) type = !strcmp("pdf", *String::AsciiValue(args[2]))
? CANVAS_TYPE_PDF
: CANVAS_TYPE_IMAGE;
Canvas *canvas = new Canvas(width, height, type);
canvas->Wrap(args.This());
return args.This();
}
fs.readFile(__dirname + '/someFile.jpg', function(err, image_data){
var Canvas = require('canvas');
var Image = Canvas.Image;
var img = new Image;
img.onload = function() {
var canvas = new Canvas(img.width,img.height);
var ctx = canvas.getContext('2d');
// grab and modify pixel data etc
}
img.src = image_data;
}