Перенос типов v8 в типы c ++ (строка) - PullRequest
0 голосов
/ 02 августа 2020

Я делаю надстройку c ++ для node.js, и у меня проблемы с передачей и получением данных. Я понял, как преобразовать v8 :: Number в double, double в v8 :: Number и int в v8: Number, но мне нужно еще немного. В основном, v8 :: String в std :: string и обратно, v8 :: Number в int и v8 :: Array в Array и обратно. Также было бы здорово перенести js объектов в некоторые переменные c ++, но это менее необходимо. Кто-нибудь знает, как это сделать? PS Я просмотрел документы и ничего не нашел о массивах и объектах, и только это string a (*v8::String::Utf8Value(args[0]->ToString())) в соответствии со строками. Но не получается, выдает ошибку error C2660: v8::Value::ToString: function does not get 0 arguments и error C2512: v8::String::Utf8Value: no suitable default constructor. У меня больше нет идей, как это реализовать. Может кто поможет? А еще я пытался что-то сделать с возвратом данных из c ++. Таким образом args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "world").ToLocalChecked()); работает, но если я сделаю вот так:

    string s = "world";
    args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, s).ToLocalChecked());

я получаю ошибку error C2664: "v8::MaybeLocal<v8::String> v8::String::NewFromUtf8(v8::Isolate *,const char *,v8::NewStringType,int)": cannot convert argument 2 from "std::string" to "const char *"

И я понятия не имею, что здесь не так. У кого-то есть опыт работы с надстройками C ++ и типами v8, как это сделать?

1 Ответ

0 голосов
/ 02 августа 2020

Для понимания v8::String, последняя версия документации поможет: https://v8docs.nodesource.com/node-14.1/d4/d1b/classv8_1_1_string_1_1_utf8_value.html (некоторые подписи немного изменились со времен Node 0.8 - научимся разобраться в ошибке компилятора messages настоятельно рекомендуется, если вы хотите разрабатывать на C ++!).

Для понимания std::string см. некоторую документацию по C ++, например: https://en.cppreference.com/w/cpp/string/basic_string

Если вы Если вам нужен реальный пример, вы можете посмотреть на V8 samples/process.cc, в котором есть функция ObjectToString, которая преобразует любой JS объект (например, v8::String) в std::string. Всего две строчки!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...