实际上是参考而不是复制PtrToStructure?

时间:2011-10-11 21:28:38

标签: c# c++ visual-studio

我的电脑里有一块硬件......共享内存。我用.dll调用它,它返回一个指向这个共享内存的指针。返回指针后,旧的C ++程序将写入并读取映射到此指针的结构。

现在我想制作一个新的C#程序来完成同样的事情。这是对.dll的调用:

[DllImport("scgtapi.dll", EntryPoint = "scgtMapMem")]
public static extern IntPtr scgtMapMem(ref scgtHandle pHandle);

....并使用:

IntPtr memPtr = Scramnet.scgtMapMem(ref gtHandle);
if (memPtr.Equals(IntPtr.Zero))
    return;
SpecialStruct myStruct = new SpecialStruct();
// Argh, making a copy
myStruct = (SpecialStruct)Marshal.PtrToStructure(memPtr, typeof(SpecialStruct));

每当我想“刷新”myStruct时,我都会调用Marshal.PtrToStructure(??)我不必担心memPtr会被移动吗?真正的目标是让myStruct能够通过我的程序之外的硬件进行更新,但仍然可以引用它(甚至可能更改其中的值)(因此有一个副本==坏)。

我希望我正确解释这一点......感谢您的帮助

1 个答案:

答案 0 :(得分:1)

为了使其正常工作,您需要在C#程序中创建一个指针 - SpecialStruct*。您需要了解Unsafe Code and Pointers