我的電腦裏有一塊硬件......共享內存。我用一個返回指向這個共享內存的指針的.dll來調用它。一旦指針返回,舊的C++程序將寫入並讀取映射到該指針的結構體。實際上是引用而不是複製PtrToStructure?
現在我想製作一個新的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能夠在我的程序之外被這個硬件更新,但仍然可以引用它(甚至可能改變它的值)(因此副本==不好)。
我希望我正確解釋這個...感謝您的幫助
在這裏找到了一些信息.. http://stackoverflow.com/questions/1318682/intptr-arithmetics ..將更新與解決方案,如果我能弄明白這一點:D – Darrell