如何使用 Mono Project 将 C/C++ 指针传递和保存到 C#,并将它们返回
Posted
技术标签:
【中文标题】如何使用 Mono Project 将 C/C++ 指针传递和保存到 C#,并将它们返回【英文标题】:How can I pass and save C/C++ pointers to C#, and return them back, using Mono Project 【发布时间】:2019-02-02 01:51:06 【问题描述】:我在弄清楚如何有效地将 C 指针传递和存储到 C#,然后在我需要 Mono 时将它们返回时遇到了一个严重的问题。我正在 C++ 之上使用 C# 构建脚本层。例如(伪代码):
C++:
GameObject* owner = new GameObject();
void* args[1] = owner;
return_object = mono_runtime_invoke("InitReference", mono_object, args, &exception);
C#:(C# GameObject 类实例)
public IntPtr InitReference(IntPtr game_object_ptr)
return game_object_ptr;
我想要实现的是 C++ 对象实例和实际 C# 表示之间的关系。这方面的信息很少,我有点迷茫。
【问题讨论】:
只是一个建议,但 C# 并不适合脚本语言。也许您可以改用 lua 并使用类似:github.com/ThePhD/sol2/tree/sol3 【参考方案1】:我的建议: 新建一个具有 StructLayout 属性的 .Net 结构,例如:
[StructLayout( LayoutKind.Explicit )]
public struct GameObject
[FieldOffset(0)]
public int Id;
......
然后.net 指针可以指向结构实例。
【讨论】:
【参考方案2】:经过一番尝试,我解决了我的问题: 首先,我将指针地址存储到 char 缓冲区中,然后将其作为整数数组 int[] 传递给 mono。这允许我的指针地址在 C# 环境中保持活动状态,并且我可以随时检索它。
【讨论】:
以上是关于如何使用 Mono Project 将 C/C++ 指针传递和保存到 C#,并将它们返回的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Mono.Zeroconf 制作 AirPlay 接收器