2011-10-11 54 views
0

我的電腦裏有一塊硬件......共享內存。我用一個返回指向這個共享內存的指針的.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能夠在我的程序之外被這個硬件更新,但仍然可以引用它(甚至可能改變它的值)(因此副本==不好)。

我希望我正確解釋這個...感謝您的幫助

+0

在這裏找到了一些信息.. http://stackoverflow.com/questions/1318682/intptr-arithmetics ..將更新與解決方案,如果我能弄明白這一點:D – Darrell

回答

1

爲了這個工作,你需要創建一個指向 - 在你的C#程序SpecialStruct*。您需要了解Unsafe Code and Pointers

+0

謝謝,但我不能改變呼叫.dll ...呃,會更多地考慮你所說的話! – Darrell

相關問題