gpt4 book ai didi

c# - 实际引用而不是复制 PtrToStructure?

转载 作者:行者123 更新时间:2023-11-28 08:16:09 29 4
gpt4 key购买 nike

我的计算机中有一 block 硬件...共享内存。我用返回指向此共享内存的指针的 .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 .

关于c# - 实际引用而不是复制 PtrToStructure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732743/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com