Моя внутренняя реакция - нет, потому что управляемая и неуправляемая память различны, но я не уверен, что .NET Framework что-то делает с Marshaling за кулисами.
Я считаю, что происходит: когдаполучение структуры из моей неуправляемой DLL, это то же самое, что и вызов вызывает получение IntPtr, а затем использует его и класс Marshal для копирования структуры в управляемую память (и изменения, вносимые в структуру в управляемой памяти, не всплывают).
Кажется, я не могу найти это нигде в MSDN.Любые ссылки приветствуются.
Вот как выглядит мой код:
[DllImport("mydll.dll", BestFitMapping=false, CharSet=CharSet.Ansi)]
private static extern int GetStruct(ref MyStruct s);
[StructLayout(LayoutKind.Sequential, Pack=0)]
struct MyStruct
{
public int Field1;
public IntPtr Field2;
}
public void DoSomething()
{
MyStruct s = new MyStruct();
GetStruct(ref s);
s.Field1 = 100; //does unmanaged memory now have 100 in Field1 as well?
s.Field2 = IntPtr.Zero; //does unmanaged memory now have a NULL pointer in field Field2 as well?
}