少年修仙传客户端基础资源
hch
2024-04-02 e51f4612104ff380475b9ef4ef78e0388bb4e9a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#pragma once
 
#include "il2cpp-config.h"
#include "il2cpp-object-internals.h"
#include "mono-api.h"
#include "utils/StringView.h"
 
#include <vector>
#include <string>
 
namespace mono
{
namespace vm
{
    class PlatformInvoke
    {
    public:
        static char* MarshalCSharpStringToCppString(MonoString* managedString);
        static void MarshalCSharpStringToCppStringFixed(MonoString* managedString, char* buffer, int numberOfCharacters);
        static mono_unichar2* MarshalCSharpStringToCppWString(MonoString* managedString);
        static void MarshalCSharpStringToCppWStringFixed(MonoString* managedString, mono_unichar2* buffer, int numberOfCharacters);
 
        static MonoString* MarshalCppStringToCSharpStringResult(const char* value);
        static MonoString* MarshalCppWStringToCSharpStringResult(const mono_unichar2* value);
 
        static char* MarshalEmptyStringBuilder(MonoStringBuilder* stringBuilder);
        static mono_unichar2* MarshalEmptyWStringBuilder(MonoStringBuilder* stringBuilder);
 
        static char* MarshalStringBuilder(MonoStringBuilder* stringBuilder);
        static mono_unichar2* MarshalWStringBuilder(MonoStringBuilder* stringBuilder);
 
        static void MarshalStringBuilderResult(MonoStringBuilder* stringBuilder, char* buffer);
        static void MarshalWStringBuilderResult(MonoStringBuilder* stringBuilder, mono_unichar2* buffer);
 
        static intptr_t MarshalDelegate(MonoDelegate* d);
        static Il2CppDelegate* MarshalFunctionPointerToDelegate(void* functionPtr, MonoClass* delegateType);
 
        template<typename T>
        static T* MarshalAllocateStringBuffer(size_t numberOfCharacters)
        {
            MonoError unused;
            return (T*)mono_marshal_alloc((unsigned long)numberOfCharacters * sizeof(T), &unused);
        }
 
    private:
        static char* MarshalEmptyStringBuilder(MonoStringBuilder* stringBuilder, size_t& stringLength, std::vector<std::string>& utf8Chunks, std::vector<MonoStringBuilder*>& builders);
        static mono_unichar2* MarshalEmptyWStringBuilder(MonoStringBuilder* stringBuilder, size_t& stringLength);
    };
} // namespace vm
} // namespace mono