有没有办法通过本机互操作将 C# 对象引用(类类型,而不是结构)传入和传出 C++?
这是我的用例:
我正在尝试用 C# 编写游戏引擎,但想使用本机 (C++) 物理库。物理库维护它自己的所有物理身体的内部状态,并让用户将少量数据(一个指针)与每个身体相关联。在物理模拟滴答之后,库提供所有移动的物理实体的列表。我想遍历这个列表并将所有更改中继到相应的 C# 对象。
问题是:将 C# 中的对象与 C++ 中的相应物理体相关联的最佳方法是什么?
我可以想到几种方法:
有没有我不知道的选项 3 之类的机制?C++/CLI 不是一个选项,因为我想支持没有它的平台。
我建议使用专为这种情况设计的工具,即System.Runtime.InteropServices.GCHandle.
用法
在:
GCHandle使用GCHandleType.Normal或为 CLR 对象分配 a GCHandleType.Weak。GCHandle为IntPtrvia GCHandle.ToIntPtr。IntPtr将其作为您提到的 userdata 指针传递给 C++ 端。出去:
IntPtr从C ++侧回来。IntPtr背面转换为过GCHandle孔GCHandle.FromIntPtrTarget属性GCHandle获取原始 CLR 对象。当不再从 C++ 端引用 CLR 对象时(因为 C++ 对象被破坏或因为您将 userdata 指针重置为 eg IntPtr.Zero),请GCHandle通过调用GCHandle.Free.
GCHandle您应该分配哪种类型取决于您是否希望GCHandle使对象保持活动状态 ( GCHandleType.Normal) 或不 ( GCHandleType.Weak)。
| 归档时间: |
|
| 查看次数: |
3339 次 |
| 最近记录: |