我想从传递字符串参数的Javascript代码中调用用C ++编写的方法。我找到的解决方案是使用Node.js和SWIG生成绑定。
我从这里开始跟踪示例(参见enobayram帖子):How can I use a C++ library from node.js?
C ++方法如下:
Handle<Value> CMyClass::Open(const v8::Arguments& args)
{
HandleScope scope;
std::string port(*v8::String::Utf8Value(args[0]));
std::cout << port << std::endl;
return scope.Close(Undefined());
}
从Node.js控制台:
var toto = require("./build/Release/MyClass")
var c = new toto.CMyClass()
c.Open("test")
Error: in method 'CMyClass_Open', argument 2 of type 'v8::Arguments const &'
at repl:1:4
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)
at ReadStream.EventEmitter.emit (events.js:98:17)
at emitKey (readline.js:1095:12)
有什么想法吗?非常感谢
答案 0 :(得分:1)
在你的swig_wrapper.i(或示例中的mylib.i)中,在行%include "std_string.i"
之前添加%include myclass.h
,然后重新运行swig。
引文:http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library
std::deque std_deque.i
std::list std_list.i
std::map std_map.i
std::pair std_pair.i
std::set std_set.i
std::string std_string.i
std::vector std_vector.i
C ++示例:
/* C++ --> JavaScript */
std::string testOut() {
return "Hello World!";
}
/* JavaScript --> C++ */
void testIn(std::string args) {
std::cout << "Result: " << args << std::endl;
}