Fix C# string chars getter in AOT build
This commit is contained in:
@@ -473,13 +473,12 @@ namespace FlaxEngine.Interop
|
||||
/// Returns pointer to the string's internal structure, containing the buffer and length of the string.
|
||||
/// </summary>
|
||||
[UnmanagedCallersOnly]
|
||||
internal static IntPtr GetStringPointer(ManagedHandle stringHandle)
|
||||
internal static char* GetStringPointer(ManagedHandle stringHandle, int* len)
|
||||
{
|
||||
string str = Unsafe.As<string>(stringHandle.Target);
|
||||
IntPtr ptr = (Unsafe.Read<IntPtr>(Unsafe.AsPointer(ref str)) + sizeof(int) * 2);
|
||||
if (ptr < 0x1024)
|
||||
throw new Exception("null string ptr");
|
||||
return ptr;
|
||||
*len = str.Length;
|
||||
fixed (char* p = str)
|
||||
return p;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
@@ -786,7 +785,7 @@ namespace FlaxEngine.Interop
|
||||
}
|
||||
|
||||
string assemblyPath = Marshal.PtrToStringAnsi(assemblyPathPtr);
|
||||
|
||||
|
||||
Assembly assembly;
|
||||
#if FLAX_EDITOR
|
||||
// Load assembly from loaded bytes to prevent file locking in Editor
|
||||
|
||||
@@ -245,12 +245,6 @@ struct NativePropertyDefinitions
|
||||
MMethodAttributes setterAttributes;
|
||||
};
|
||||
|
||||
struct NativeString
|
||||
{
|
||||
int32 length;
|
||||
Char chars[1];
|
||||
};
|
||||
|
||||
MDomain* MCore::CreateDomain(const StringAnsi& domainName)
|
||||
{
|
||||
return nullptr;
|
||||
@@ -369,9 +363,10 @@ MString* MCore::String::New(const Char* str, int32 length, MDomain* domain)
|
||||
|
||||
StringView MCore::String::GetChars(MString* obj)
|
||||
{
|
||||
int32 length = 0;
|
||||
static void* GetStringPointerPtr = GetStaticMethodPointer(TEXT("GetStringPointer"));
|
||||
NativeString* str = (NativeString*)CallStaticMethod<void*, void*>(GetStringPointerPtr, obj);
|
||||
return StringView(str->chars, str->length);
|
||||
const Char* chars = CallStaticMethod<const Char*, void*, int*>(GetStringPointerPtr, obj, &length);
|
||||
return StringView(chars, length);
|
||||
}
|
||||
|
||||
MArray* MCore::Array::New(const MClass* elementKlass, int32 length)
|
||||
|
||||
Reference in New Issue
Block a user