Как преобразовать const char * в KString в Kotlin / Native?

В файле C ++ я хочу преобразовать const char * в KString, чтобы затем передать KString в файл Kotlin с помощью Kotlin / Native .

Я считаю, что ответ лежит в функции

OBJ_GETTER(utf8ToUtf16, const char* rawString, size_t rawStringLength) 

что я нашел в KString.cpp . Но даже несмотря на то, что я обнаружил используемые операторы define в Memory.h , мне еще не удалось правильно вызвать функцию utf8ToUtf16 из моего собственного файла C ++, чтобы получить KString. Любая помощь приветствуется.

    Я закончил тем, что купил, чтобы написать свою собственную функцию:

     KString getKString(const char* rawString) { size_t rawStringLength = strlen(rawString); ObjHeader** OBJ_RESULT; uint32_t charCount = utf8::unchecked::distance(rawString, rawString + rawStringLength); ArrayHeader* result = AllocArrayInstance(theStringTypeInfo, charCount, OBJ_RESULT)->array(); KChar* rawResult = CharArrayAddressOfElementAt(result, 0); auto convertResult = utf8::unchecked::utf8to16(rawString, rawString + rawStringLength, rawResult); ObjHeader* obj = result->obj(); UpdateReturnRef(OBJ_RESULT, obj); return (const ArrayHeader*)obj; } 

    В моем тестовом коде (C ++) я использую его следующим образом:

     ... RuntimeState* state = InitRuntime(); KString inMessage; { ObjHolder args; inMessage = getKString("Hello from C++"); } ... DeinitRuntime(state); 

    и включают Memory.h, Natives.h, Runtime.h, KString.h, utf8.h, stdlib.h и строку. Вы можете избавиться от некоторых из них.

    Как побочное замечание, вы можете понять, как AllocArrayInstance используется в функции. Было бы неплохо, если бы просто можно было сделать то же самое для получения KString, что-то вроде:

     ObjHeader** OBJ_RESULT; KString kstr = utf8ToUtf16(rawString, rawStringLength, OBJ_RESULT); 

    Это не сработало из моей функции, так как utf8ToUtf16 не был найден. Я считаю, что причина в том, что (на момент написания) соответствующая функция в KString.cpp находится внутри блока пространства имен {…}, так что он не может использоваться из другого файла. Вот почему я закончил имитировать функцию, как показано выше.