我的电脑里有一块硬件......共享内存。我用.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能够通过我的程序之外的硬件进行更新,但仍然可以引用它(甚至可能更改其中的值)(因此有一个副本==坏)。
我希望我正确解释这一点......感谢您的帮助