Вызов конструктора с именованными аргументами через вызовы dart_api.h

Я пытаюсь вызвать const Duration конструктор из собственного расширения Dart. Как бы я использовал Dart_New C функция для вызова этого конструктора?

Я пытался просто вызвать его, как и любой другой Dart_New позвони, но я получу Incorrect number of arguments ошибка.

1 ответ

Следующий фрагмент кода взят из великолепной библиотеки oracle.dart для взаимодействия с базами данных Oracle. Он читает дату Oracle из набора результатов и создает новый дротик DateTime объект с 6 аргументами конструктора.

void OracleResultSet_getDate(Dart_NativeArguments args) {
  Dart_EnterScope();

  auto rs = getThis<occi::ResultSet>(args);
  int64_t index = getDartArg<int64_t>(args, 1);

  occi::Date date;
  try {
    date = rs->getDate(index);
  } CATCH_SQL_EXCEPTION

  int year;
  unsigned int month;
  unsigned int day;
  unsigned int hour;
  unsigned int min;
  unsigned int seconds;
  date.getDate(year, month, day, hour, min, seconds);

  std::vector<Dart_Handle> dargs;
  dargs.push_back(Dart_NewInteger(year));
  dargs.push_back(Dart_NewInteger(month));
  dargs.push_back(Dart_NewInteger(day));
  dargs.push_back(Dart_NewInteger(hour));
  dargs.push_back(Dart_NewInteger(min));
  dargs.push_back(Dart_NewInteger(seconds));

  Dart_Handle lib = GetDartLibrary("dart:core");
  Dart_Handle type = HandleError(Dart_GetType(lib, Dart_NewStringFromCString("DateTime"), 0, NULL));
  Dart_Handle obj = HandleError(Dart_New(type, Dart_Null(), 6, &dargs[0]));

  Dart_SetReturnValue(args, obj);
  Dart_ExitScope();
}
Другие вопросы по тегам