Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8900

v8::Localと std::basic_string の相互変換

$
0
0

node.js C++ addons での文字列変換について
nan 等は使わずに V8 API (14.x)向け

共通

windows は _UNICODEが定義されている必要があります

#define ISOLATE v8::Isolate::GetCurrent()
#if defined(_WIN32)
// windowstypedefwchar_t_char_t;#else
// mac, linuxtypedefchar_char_t;#endif
typedefstd::basic_string<_char_t>_string_t;

v8::Local<v8::String> → std::basic_string

_string_tto_string(constv8::Local<v8::String>&str){#if defined(_WIN32)
// windowsstd::unique_ptr<_char_t[]>buff(new_char_t[str->Length()+1]());str->Write(ISOLATE,(uint16_t*)buff.get(),0,-1,v8::String::NO_NULL_TERMINATION);return_string_t(buff.get());#else
// mac, linuxstd::unique_ptr<_char_t[]>buff(new_char_t[str->Utf8Length(ISOLATE)+1]());str->WriteUtf8(ISOLATE,buff.get(),-1,NULL,v8::String::NO_NULL_TERMINATION);return_string_t(buff.get());#endif
}

std::basic_string → v8::Local<v8::String>

v8::Local<v8::String>to_string(const_string_t&str){#if defined(_WIN32)
// windowsreturnv8::String::NewFromTwoByte(ISOLATE,(uint16_t*)str.c_str()).ToLocalChecked();#else
// mac, linuxreturnv8::String::NewFromUtf8(ISOLATE,str.c_str()).ToLocalChecked();#endif
}

Viewing all articles
Browse latest Browse all 8900

Trending Articles