コード例 #1
0
        public override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList <MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess)
        {
            string str;

            if (this._isStringBuilder)
            {
                str = !this.IsWideString ? "il2cpp_codegen_marshal_string_builder_result" : "il2cpp_codegen_marshal_wstring_builder_result";
                object[] args = new object[] { str, destinationVariable.Load(), variableName };
                writer.WriteLine("{0}({1}, {2});", args);
            }
            else
            {
                Mono.Cecil.NativeType type = this._nativeType;
                if (type == Mono.Cecil.NativeType.BStr)
                {
                    str = "il2cpp_codegen_marshal_bstring_result";
                }
                else if (type == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean))
                {
                    str = "il2cpp_codegen_marshal_hstring_result";
                }
                else
                {
                    str = !this.IsWideString ? "il2cpp_codegen_marshal_string_result" : "il2cpp_codegen_marshal_wstring_result";
                }
                object[] objArray2 = new object[] { str, variableName };
                writer.WriteLine(destinationVariable.Store("{0}({1})", objArray2));
            }
        }
コード例 #2
0
 public StringMarshalInfoWriter(TypeReference type, MarshalType marshalType, MarshalInfo marshalInfo, bool useUnicodeCharSet, bool forByReferenceType, bool forFieldMarshaling) : base(type)
 {
     this._isStringBuilder   = MarshalingUtils.IsStringBuilder(type);
     this._useUnicodeCharSet = useUnicodeCharSet;
     this._nativeType        = DetermineNativeTypeFor(marshalType, marshalInfo, this._useUnicodeCharSet, this._isStringBuilder);
     if (this._nativeType == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean))
     {
         this._marshaledTypeName = "Il2CppHString";
     }
     else if (this.IsWideString)
     {
         this._marshaledTypeName = "Il2CppChar*";
     }
     else
     {
         this._marshaledTypeName = "char*";
     }
     this._marshaledTypes = new MarshaledType[] { new MarshaledType(this._marshaledTypeName, this._marshaledTypeName) };
     this._marshalInfo    = marshalInfo;
     this._canReferenceOriginalManagedString = ((!this._isStringBuilder && !forByReferenceType) && !forFieldMarshaling) && ((this._nativeType == Mono.Cecil.NativeType.LPWStr) || (this._nativeType == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean)));
 }
コード例 #3
0
 public StringMarshalInfoWriter(TypeReference type, MarshalType marshalType, MarshalInfo marshalInfo, bool useUnicodeCharSet, bool forByReferenceType, bool forFieldMarshaling) : base(type)
 {
     this._isStringBuilder = MarshalingUtils.IsStringBuilder(type);
     this._useUnicodeCharSet = useUnicodeCharSet;
     this._nativeType = DetermineNativeTypeFor(marshalType, marshalInfo, this._useUnicodeCharSet, this._isStringBuilder);
     if (this._nativeType == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean))
     {
         this._marshaledTypeName = "Il2CppHString";
     }
     else if (this.IsWideString)
     {
         this._marshaledTypeName = "Il2CppChar*";
     }
     else
     {
         this._marshaledTypeName = "char*";
     }
     this._marshaledTypes = new MarshaledType[] { new MarshaledType(this._marshaledTypeName, this._marshaledTypeName) };
     this._marshalInfo = marshalInfo;
     this._canReferenceOriginalManagedString = ((!this._isStringBuilder && !forByReferenceType) && !forFieldMarshaling) && ((this._nativeType == Mono.Cecil.NativeType.LPWStr) || (this._nativeType == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean)));
 }
コード例 #4
0
 private void FreeMarshaledString(CppCodeWriter writer, string variableName)
 {
     if (!this.IsFixedSizeString)
     {
         Mono.Cecil.NativeType type = this._nativeType;
         if (type == Mono.Cecil.NativeType.BStr)
         {
             object[] objArray1 = new object[] { variableName };
             writer.WriteLine("il2cpp_codegen_marshal_free_bstring({0});", objArray1);
         }
         else if (type == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean))
         {
             object[] objArray2 = new object[] { variableName };
             writer.WriteLine("il2cpp_codegen_marshal_free_hstring({0});", objArray2);
         }
         else
         {
             object[] objArray3 = new object[] { variableName };
             writer.WriteLine("il2cpp_codegen_marshal_free({0});", objArray3);
         }
         object[] args = new object[] { variableName, DefaultMarshalInfoWriter.Naming.Null };
         writer.WriteLine("{0} = {1};", args);
     }
 }