私は私自身の機能の書き込みに駒を取ってしまった:私のテストコード(C++)で
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;
}
を、私はこのようにそれを使用します。
...
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、およびstring。あなたはこれらのいくつかを取り除くことができるかもしれません。
説明では、AllocArrayInstanceが関数でどのように使用されているかがわかります。 1は、単にKString、のようなものを取得するために同じことを行うことができれば、いいだろう:
ObjHeader** OBJ_RESULT;
KString kstr = utf8ToUtf16(rawString, rawStringLength, OBJ_RESULT);
utf8ToUtf16が見つかりませんでしたので、これは、私の機能から動作しませんでした。理由は、KString.cpp内のそれぞれの関数が別のファイルから使用できないような名前空間{...}ブロック内にあることです(記述時に)。だからこそ私は上記のような機能を模倣した。