我的计算机中有一块硬件...共享内存。我用一个.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能够在我的程序之外通过此硬件进行更新,并且仍然引用它(甚至更改其中的值)(因此,副本==不好)。

希望我能正确解释...感谢您的帮助

最佳答案

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

09-06 14:07