我的直覺反應是否定的,因爲託管和非託管內存是不同的,但我不確定.NET Framework是否正在幕後進行一些操作。C#中的結構修改會影響非託管內存嗎?
我相信發生的情況是: 當正從我的非託管的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?
}
我認爲這是正確的答案。事實上,沒有任何東西掛鉤到結構(或其字段)中,以便在其字段更改時將其更改回非託管內存似乎確實地回答了這個問題。 – userx 2010-09-24 00:43:31