如何将const char *转换为Kotlin / Native中的KString?
在C ++文件中,我想将一个const char *转换为KString,这样我就可以使用Kotlin / Native将KString传递给一个Kotlin文件。
我相信答案在于function
OBJ_GETTER(utf8ToUtf16, const char* rawString, size_t rawStringLength)
我在KString.cpp中find。 但即使我在Memory.h中发现了使用的定义语句,我还没有设法从我自己的C ++文件中正确地调用函数utf8ToUtf16
来获得KString。 任何帮助表示赞赏。
我结束了写作自己的function:
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中的相应函数是在一个命名空间{…}的块中,因此它不能从另一个文件中使用。 这就是为什么我最终模仿如上所示的function。