2015-01-29 2 views
1

node.js 네이티브 추상화를 네이티브 확장으로서 다트로 이식하려고합니다. node.js nan도 v8 네임 스페이스를 사용하고 있습니다.이 네임 스페이스는별로 익숙하지 않습니다.Dart_Handle List를 C++ 배열로 어떻게 변환합니까?

내가 함께하는 데 문제가 있음을 특히 [미완성] 코드 조각이 될 것이다 :

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); 

답변

3

v8::Array::GetDart_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); 
} 
:

이 같은 것을 쓰고 싶은 것

관련 문제