public static readonly string DisableRuntimeMarshalling = "[assembly:System.Runtime.CompilerServices.DisableRuntimeMarshalling]";
+ public static readonly string UsingSystemRuntimeInteropServicesMarshalling = "using System.Runtime.InteropServices.Marshalling;";
+
/// <summary>
/// Declaration with parameters with <see cref="StringMarshalling"/> set.
/// </summary>
/// </summary>
public static string BasicParametersAndModifiers(string typeName, string preDeclaration = "") => $@"
using System.Runtime.InteropServices;
-using System.Runtime.InteropServices.Marshalling;
{preDeclaration}
partial class Test
{{
+ NonBlittableUserDefinedType()
+ NativeTypeOut;
- public static string ParametersAndModifiers = BasicParametersAndModifiers("S")
+ public static string ParametersAndModifiers = BasicParametersAndModifiers("S", UsingSystemRuntimeInteropServicesMarshalling)
+ NonBlittableUserDefinedType(defineNativeMarshalling: true)
+ NativeTypeRef;
public S ToManaged() => new S { b = i != 0 };
}
";
- public static string OptionalStackallocParametersAndModifiers = BasicParametersAndModifiers("S")
+ public static string OptionalStackallocParametersAndModifiers = BasicParametersAndModifiers("S", UsingSystemRuntimeInteropServicesMarshalling)
+ NonBlittableUserDefinedType() + @"
[CustomTypeMarshaller(typeof(S), Features = CustomTypeMarshallerFeatures.CallerAllocatedBuffer, BufferSize = 1)]
struct Native
public void FromNativeValue(int value) { }
}
";
- public static string TwoStageParametersAndModifiers = BasicParametersAndModifiers("S")
+ public static string TwoStageParametersAndModifiers = BasicParametersAndModifiers("S", UsingSystemRuntimeInteropServicesMarshalling)
+ NonBlittableUserDefinedType() + @"
[CustomTypeMarshaller(typeof(S), Features = CustomTypeMarshallerFeatures.TwoStageMarshalling)]
struct Native
public void FromNativeValue(int value) { }
}
";
- public static string TwoStageRefReturn = BasicParametersAndModifiers("S")
+ public static string TwoStageRefReturn = BasicParametersAndModifiers("S", UsingSystemRuntimeInteropServicesMarshalling)
+ NonBlittableUserDefinedType() + @"
[CustomTypeMarshaller(typeof(S), Direction = CustomTypeMarshallerDirection.In, Features = CustomTypeMarshallerFeatures.TwoStageMarshalling)]
unsafe struct Native
public ref byte ToNativeValue() => throw null;
}
";
- public static string PinnableParametersAndModifiers = BasicParametersAndModifiers("S") + @"
+ public static string PinnableParametersAndModifiers = BasicParametersAndModifiers("S", UsingSystemRuntimeInteropServicesMarshalling) + @"
[NativeMarshalling(typeof(Native))]
class S
{