【发布时间】:2010-09-02 18:29:58
【问题描述】:
我的直觉反应是否定的,因为托管和非托管内存是不同的,但我不确定 .NET Framework 是否在幕后使用编组。
我认为会发生的是: 从我的非托管 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?
}
【问题讨论】: