保存
×

跟着node-addon-examples学习node addon开发~

基础

开发中遇到的问题

hello world

/**
 * C++ 实现JS函数的两种情况
 */
// 用于V8内部, JS的C++实现
// Arguments继承自FunctionCallbackInfo类
// 参见http://bespin.cz/~ondras/html/classv8_1_1Arguments.html
Handle<Value> hello(const Arguments args){
    // 操作符[]取Local<Value>型的参数(JS中的参数)具有如下公共成员函数
    V8_INLINE (int Length() const)
    V8_INLINE (Local< Value > operator[](int i) const)
    V8_INLINE (Local< Function > Callee() const)
    V8_INLINE (Local< Object > This() const)
    V8_INLINE (Local< Object > Holder() const)
    V8_INLINE (bool IsConstructCall() const)
    V8_INLINE (Local< Value > Data() const)
    V8_INLINE (Isolate *GetIsolate() const)
    V8_INLINE (ReturnValue< T > GetReturnValue() const)
}
// Handle<Object> target
target->Set(String::NewSymbol("greet"), func_tmpl->GetFunction());

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// 上面的写法是Node v0.10之前的API, 下面的写法是Node v0.11之后的API
// node-gyp采用可执行的node版本来进行编译处理,之前Node是v0.10.22
// 因此无法通过编译,报错error: ‘FunctionCallbackInfo’ does not name a type
/**
 * v8::FunctionCallbackInfo 是类模板,用于处理各种类型
 * 参考:
 *  + template<class a_type> class a_class {} 
 *    http://www.cprogramming.com/tutorial/templates.html
 *  + http://www.learncpp.com/cpp-tutorial/143-template-classes/
 */
void Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
 
}
// global = v8::ObjectTemplate::New();
global->Set(v8::String::New("version"), v8::FunctionTemplate::New(Version));

function arguments

Fabolous-Breathe

V8中的异常

通过ThrowException函数抛出异常的实例,异常实例通过异常对象Exception的五个成员函数生成,分别为RangeError, ReferenceError, SynctaxError, TypeError, Error,抛出异常的方法如下

ThrowException(Exception::TypeError(String::New("xxx")));