private void WriteMarshalToNativeForNonSealedType(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable) { object[] args = new object[] { sourceVariable.Load() }; writer.WriteLine("if (({0})->klass->is_import_or_windows_runtime)", args); using (new BlockWriter(writer, false)) { if (this._isClass) { object[] objArray2 = new object[] { destinationVariable, sourceVariable.Load(), DefaultMarshalInfoWriter.Naming.ForComTypeInterfaceFieldGetter(this._defaultInterface) }; writer.WriteLine("{0} = ({1})->{2}();", objArray2); object[] objArray3 = new object[] { destinationVariable }; writer.WriteLine("{0}->AddRef();", objArray3); } else { object[] objArray4 = new object[] { DefaultMarshalInfoWriter.Naming.ForInteropHResultVariable(), DefaultMarshalInfoWriter.Naming.ForVariable(DefaultMarshalInfoWriter.TypeProvider.Il2CppComObjectTypeReference), sourceVariable.Load(), DefaultMarshalInfoWriter.Naming.ForIl2CppComObjectIdentityField(), this._interfaceTypeName, destinationVariable }; writer.WriteLine("il2cpp_hresult_t {0} = (({1}){2})->{3}->QueryInterface({4}::IID, reinterpret_cast<void**>(&{5}));", objArray4); writer.WriteStatement(Emit.Call("il2cpp_codegen_com_raise_exception_if_failed", DefaultMarshalInfoWriter.Naming.ForInteropHResultVariable())); } } writer.WriteLine("else"); using (new BlockWriter(writer, false)) { object[] objArray5 = new object[] { destinationVariable, this._interfaceTypeName, sourceVariable.Load() }; writer.WriteLine("{0} = il2cpp_codegen_com_get_or_create_ccw<{1}>({2});", objArray5); } }
public sealed override string WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { string variableName = string.Format("_{0}_marshaled", sourceVariable.GetNiceName()); this.WriteNativeVariableDeclarationOfType(writer, variableName); this.WriteMarshalVariableToNative(writer, sourceVariable, variableName, managedVariableName, metadataAccess); return variableName; }
public override string WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { if (DefaultMarshalInfoWriter.Naming.ForVariable(base._typeRef) != this._marshaledTypes[0].DecoratedName) { return string.Format("reinterpret_cast<{0}>({1})", this._marshaledTypes[0].DecoratedName, sourceVariable.Load()); } return sourceVariable.Load(); }
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { if (!this.CanMarshalTypeToNative()) { throw new InvalidOperationException("Cannot marshal HandleRef by reference to native code."); } if (<>f__am$cache0 == null) {
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { this.WriteMarshalVariableToNative(writer, sourceVariable, destinationVariable, managedVariableName, metadataAccess, false); }
private void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess, bool isMarshalingReturnValue) { string str; if (this._nativeType == (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean)) { object[] args = new object[] { sourceVariable.Load(), DefaultMarshalInfoWriter.Naming.Null }; writer.WriteLine("if ({0} == {1})", args); using (new BlockWriter(writer, false)) { object[] arguments = new object[] { !string.IsNullOrEmpty(managedVariableName) ? managedVariableName : sourceVariable.GetNiceName() }; writer.WriteStatement(Emit.RaiseManagedException("il2cpp_codegen_get_argument_null_exception(\"{0}\")", arguments)); } } if (this.IsFixedSizeString) { str = !this.IsWideString ? "il2cpp_codegen_marshal_string_fixed" : "il2cpp_codegen_marshal_wstring_fixed"; object[] objArray3 = new object[] { str, sourceVariable.Load(), this._marshaledTypeName, destinationVariable, ((FixedSysStringMarshalInfo) this._marshalInfo).Size }; writer.WriteLine("{0}({1}, ({2})&{3}, {4});", objArray3); } else if (this._canReferenceOriginalManagedString && !isMarshalingReturnValue) { if (this._nativeType != Mono.Cecil.NativeType.LPWStr) { if (this._nativeType != (Mono.Cecil.NativeType.Error | Mono.Cecil.NativeType.Boolean)) { throw new InvalidOperationException(string.Format("StringMarshalInfoWriter doesn't know how to marshal {0} while maintaining reference to original managed string.", this._nativeType)); } string niceName = sourceVariable.GetNiceName(); string str4 = niceName + "NativeView"; string str5 = niceName + "HStringReference"; writer.WriteLine(); object[] objArray6 = new object[] { str4, sourceVariable.Load() }; writer.WriteLine("DECLARE_IL2CPP_STRING_AS_STRING_VIEW_OF_NATIVE_CHARS({0}, {1});", objArray6); object[] objArray7 = new object[] { str5, str4 }; writer.WriteLine("il2cpp::utils::Il2CppHStringReference {0}({1});", objArray7); object[] objArray8 = new object[] { destinationVariable, str5 }; writer.WriteLine("{0} = {1};", objArray8); } else { string str2 = sourceVariable.Load(); object[] objArray4 = new object[] { str2, DefaultMarshalInfoWriter.Naming.Null }; writer.WriteLine("if ({0} != {1})", objArray4); using (new BlockWriter(writer, false)) { if (<>f__am$cache0 == null) {
public sealed override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { variableName, DefaultMarshalInfoWriter.Naming.Null }; writer.WriteLine("if ({0} != {1})", args); using (new BlockWriter(writer, false)) { TypeReference type = (!Extensions.IsInterface(base._typeRef) && Extensions.IsComOrWindowsRuntimeType(base._typeRef.Resolve())) ? base._typeRef : DefaultMarshalInfoWriter.TypeProvider.Il2CppComObjectTypeReference; if (this._isSealed) { object[] objArray2 = new object[] { this._managedTypeName, variableName, metadataAccess.TypeInfoFor(base._typeRef) }; writer.WriteLine(destinationVariable.Store("il2cpp_codegen_com_get_or_create_rcw_for_sealed_class<{0}>({1}, {2})", objArray2)); } else if (this._marshalAsInspectable) { object[] objArray3 = new object[] { this._managedTypeName, variableName, metadataAccess.TypeInfoFor(type) }; writer.WriteLine(destinationVariable.Store("il2cpp_codegen_com_get_or_create_rcw_from_iinspectable<{0}>({1}, {2})", objArray3)); } else { object[] objArray4 = new object[] { this._managedTypeName, variableName, metadataAccess.TypeInfoFor(type) }; writer.WriteLine(destinationVariable.Store("il2cpp_codegen_com_get_or_create_rcw_from_iunknown<{0}>({1}, {2})", objArray4)); } } writer.WriteLine("else"); using (new BlockWriter(writer, false)) { writer.WriteLine(destinationVariable.Store(DefaultMarshalInfoWriter.Naming.Null)); } }
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)); } }
public override string WriteMarshalEmptyVariableToNative(CppCodeWriter writer, ManagedMarshalValue variableName, IList<MarshaledParameter> methodParameters) { string str = string.Format("_{0}_marshaled", variableName.GetNiceName()); this.WriteNativeVariableDeclarationOfType(writer, str); return str; }
public override string WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { return sourceVariable.LoadAddress(); }
public override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { throw new InvalidOperationException("Cannot marshal HandleRef from native code"); }
public override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { variableName }; writer.WriteLine(destinationVariable.Store("(Il2CppObject*)il2cpp_codegen_com_marshal_variant_result(&({0}))", args)); }
public override string WriteMarshalEmptyVariableToNative(CppCodeWriter writer, ManagedMarshalValue variableName, IList<MarshaledParameter> methodParameters) { throw new InvalidOperationException(string.Format("Cannot marshal {0} to native!", base._typeRef.FullName)); }
public override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { if (this._marshalInfo.ElementType == VariantType.BStr) { object[] args = new object[] { DefaultMarshalInfoWriter.Naming.ForType(base._typeRef), metadataAccess.TypeInfoFor(this._elementType), variableName }; writer.WriteLine(destinationVariable.Store("({0}*)il2cpp_codegen_com_marshal_safe_array_bstring_result({1}, {2})", args)); } else { object[] objArray2 = new object[] { DefaultMarshalInfoWriter.Naming.ForType(base._typeRef), this._marshalInfo.ElementType.ToString().ToUpper(), metadataAccess.TypeInfoFor(this._elementType), variableName }; writer.WriteLine(destinationVariable.Store("({0}*)il2cpp_codegen_com_marshal_safe_array_result(IL2CPP_VT_{1}, {2}, {3})", objArray2)); } }
public override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { writer.WriteLine(destinationVariable.Store(this.WriteMarshalVariableFromNative(writer, variableName, methodParameters, returnValue, forNativeWrapperOfManagedMethod, metadataAccess))); }
public override void WriteMarshalOutParameterToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IList<MarshaledParameter> methodParameters, IRuntimeMetadataAccess metadataAccess) { this._elementTypeMarshalInfoWriter.WriteMarshalVariableToNative(writer, sourceVariable.Dereferenced, DefaultMarshalInfoWriter.Naming.Dereference(this.UndecorateVariable(destinationVariable)), managedVariableName, metadataAccess); }
public override void WriteMarshalOutParameterFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { this._elementTypeMarshalInfoWriter.WriteMarshalVariableFromNative(writer, DefaultMarshalInfoWriter.Naming.Dereference(variableName), destinationVariable.Dereferenced, methodParameters, returnValue, forNativeWrapperOfManagedMethod, metadataAccess); }
public override string WriteMarshalEmptyVariableToNative(CppCodeWriter writer, ManagedMarshalValue variableName, IList<MarshaledParameter> methodParameters) { string str = string.Format("_{0}_empty", variableName.GetNiceName()); this._elementTypeMarshalInfoWriter.WriteNativeVariableDeclarationOfType(writer, str); return DefaultMarshalInfoWriter.Naming.AddressOf(str); }
public ManagedMarshalValue(ManagedMarshalValue arrayValue, string indexVariableName) { this._objectVariableName = arrayValue._objectVariableName; this._field = arrayValue._field; this._indexVariableName = indexVariableName; }
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { throw new InvalidOperationException(string.Format("Cannot marshal {0} to native!", base._typeRef.FullName)); }
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { destinationVariable, this.WriteMarshalVariableToNative(writer, sourceVariable, managedVariableName, metadataAccess) }; writer.WriteLine("{0} = {1};", args); }
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { if (this._marshalInfo.ElementType == VariantType.BStr) { object[] args = new object[] { destinationVariable, sourceVariable.Load() }; writer.WriteLine("{0} = il2cpp_codegen_com_marshal_safe_array_bstring({1});", args); } else { object[] objArray2 = new object[] { destinationVariable, this._marshalInfo.ElementType.ToString().ToUpper(), sourceVariable.Load() }; writer.WriteLine("{0} = il2cpp_codegen_com_marshal_safe_array(IL2CPP_VT_{1}, {2});", objArray2); } }
public override void WriteMarshalVariableFromNative(CppCodeWriter writer, string variableName, ManagedMarshalValue destinationVariable, IList<MarshaledParameter> methodParameters, bool returnValue, bool forNativeWrapperOfManagedMethod, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { DefaultMarshalInfoWriter.Naming.ForType(base._typeRef), variableName, metadataAccess.TypeInfoFor(base._typeRef) }; writer.WriteLine(destinationVariable.Store("il2cpp_codegen_marshal_function_ptr_to_delegate<{0}>({1}, {2})", args)); }
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { destinationVariable, sourceVariable.Load() }; writer.WriteLine("{0} = il2cpp_codegen_marshal_delegate(reinterpret_cast<Il2CppCodeGenMulticastDelegate*>({1}));", args); }
public sealed override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { sourceVariable.Load(), DefaultMarshalInfoWriter.Naming.Null }; writer.WriteLine("if ({0} != {1})", args); using (new BlockWriter(writer, false)) { if (this._isSealed) { object[] objArray2 = new object[] { destinationVariable, sourceVariable.Load(), DefaultMarshalInfoWriter.Naming.ForComTypeInterfaceFieldGetter(this._defaultInterface) }; writer.WriteLine("{0} = ({1})->{2}();", objArray2); } else { this.WriteMarshalToNativeForNonSealedType(writer, sourceVariable, destinationVariable); } } writer.WriteLine("else"); using (new BlockWriter(writer, false)) { object[] objArray3 = new object[] { destinationVariable, DefaultMarshalInfoWriter.Naming.Null }; writer.WriteLine("{0} = {1};", objArray3); } }
public override void WriteMarshalVariableToNative(CppCodeWriter writer, ManagedMarshalValue sourceVariable, string destinationVariable, string managedVariableName, IRuntimeMetadataAccess metadataAccess) { object[] args = new object[] { sourceVariable.Load(), destinationVariable }; writer.WriteLine("il2cpp_codegen_com_marshal_variant((Il2CppCodeGenObject*)({0}), &({1}));", args); }