【发布时间】:2011-10-11 21:28:37
【问题描述】:
我的电脑中有一个硬件...共享内存。我用一个.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 能够通过我的程序之外的硬件进行更新,但仍然可以引用它(甚至可能更改其中的值)(因此有一个副本 == 不好)。
希望我的解释正确...感谢您的帮助
【问题讨论】:
-
在这里找到了一些信息.. stackoverflow.com/questions/1318682/intptr-arithmetics .. 如果我能解决这个问题,将会更新解决方案:D
标签: c# c++ visual-studio