【问题标题】:Actually reference rather than copy PtrToStructure?实际上引用而不是复制 PtrToStructure?
【发布时间】: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 能够通过我的程序之外的硬件进行更新,但仍然可以引用它(甚至可能更改其中的值)(因此有一个副本 == 不好)。

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

【问题讨论】:

标签: c# c++ visual-studio


【解决方案1】:

为了让它工作,你需要在你的 C# 程序中创建一个指针——SpecialStruct*。你需要了解Unsafe Code and Pointers

【讨论】:

  • 谢谢,但我无法更改对 .dll 的调用...呃,会考虑您所说的更多!
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 2021-11-15
  • 2013-05-17
相关资源
最近更新 更多