[GeneratedDllImport("MyDLL")]
[return: MarshalUsing(typeof(MyStringMarshaler))]
public static partial string MyFunction();
and
[GeneratedDllImport("MyDLL")]
[return: MarshalUsing(typeof(MyStringMarshaler))]
public static partial ref string MyFunction();
will return same pinvoke, ex.
[System.Runtime.InteropServices.DllImportAttribute("MyDLL", EntryPoint = "MyFunction")]
extern private static unsafe global:Type_Of_MyStringMarshaler_Value MyFunction__PInvoke__();