Клонируйте его, прежде чем передать по реф. Очевидно, что если вы передаете указатель на свою структуру неуправляемому коду, у вас нет способа принудительно установить свойства памяти только для чтения в этом месте. Поскольку это структура, она может быть такой простой:
Если у вас есть это,
private struct DataType
{
public int X;
public int Y;
}
private class NativeMethods
{
[DllImport("MyDll")]
public static extern void SomeMethod(ref DataType value);
}
Тогда вызов до этого может быть:
DataType data = ...;
NativeMethods.SomeMethod(ref data);
И вызов после может быть:
DataType data = ...;
DataType temp = data;
NativeMethods.SomeMethod(ref temp);