我试图将node.js本机抽象移植到dart作为本机扩展。 node.js nan恰好也正在使用v8名称空间,我并不十分熟悉它。
特别是我遇到问题的[不完整]代码段将是:
NAN_METHOD(TestFunction) {
NanScope();
String::Utf8Value file(args[0]->ToString());
int i = 0;
Local<Array> argv_ = Local<Array>::Cast(args[1]);
int argc = argv_->Length();
int argl = argc + 1 + 1;
char **argv = new char*[argl];
argv[0] = strdup(*file);
argv[argl-1] = NULL;
for (; i < argc; i++) {
String::Utf8Value arg(argv_->Get(NanNew<Integer>(i))->ToString());
argv[i+1] = strdup(*arg);
字符串和整数是相当简单的,但是dart_api.h中对于数组的等效函数似乎不存在,所以我有点卡住了。这就是我到目前为止所做的:
void TestFunction(Dart_NativeArguments args) {
Dart_EnterScope();
uint8_t* file;
intptr_t f_length = 0;
Dart_StringToUTF8(Dart_GetNativeArgument(args, 0), &file, &f_length);
int i = 0;
intptr_t a_length;
Dart_Handle a_list;
Dart_handle a_handle;
a_list = Dart_GetNativeArgument(args, 1);
a_handle = Dart_ListLength(list, &a_length);
答案 0 :(得分:3)
v8::Array::Get
是Dart_ListGetAt
。
你想写这样的东西:
intptr_t argc = 0;
DART_CHECK_VALID(Dart_ListLength(list, &argc));
for (intptr_t i = 0; i < argc; i++) {
Dart_Handle element = Dart_ListGetAt(list, i);
DART_CHECK_VALID(element);
const char* element_str = NULL;
DART_CHECK_VALID(Dart_StringToCString(element, &element_str));
argv[i + 1] = strdup(element_str);
}