如何将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。