有没有办法通过本机互操作将C#对象引用(类类型,而不是结构体)传递到和从C ++中传出?
这是我的用例:
我正在尝试使用C#编写游戏引擎,但希望使用本机(C ++)物理库。物理库维护所有物理体的内部状态,并允许用户将少量数据(指针)与每个物体相关联。在物理模拟时刻之后,该库提供了移动的所有物理体的列表。我想遍历此列表并将所有更改转发给相应的C#对象。
问题是:在C++中将C#对象与相应的物理体关联起来的最佳方法是什么?
我可以想到几种方法:
1. 给每个物理体一个ID,将ID与C ++中的物理体相关联,并维护ID到C#对象的相应映射。即使有优化的映射机制,这对我来说似乎也是不必要的间接方式。
2. 利用编组C#委托(可以隐式引用C#对象实例)为C ++函数指针。这可能是最好的方法;我不知道C#如何实现委托以及这会带来什么类型的开销。
3. 查找一些其他方式来引用C#对象并将该引用与每个本机物理体相关联。
是否有像选项3这样的机制我不知道?由于我想支持没有C++ / CLI的平台,因此C ++ / CLI不是一个选项。
这是我的用例:
我正在尝试使用C#编写游戏引擎,但希望使用本机(C ++)物理库。物理库维护所有物理体的内部状态,并允许用户将少量数据(指针)与每个物体相关联。在物理模拟时刻之后,该库提供了移动的所有物理体的列表。我想遍历此列表并将所有更改转发给相应的C#对象。
问题是:在C++中将C#对象与相应的物理体关联起来的最佳方法是什么?
我可以想到几种方法:
1. 给每个物理体一个ID,将ID与C ++中的物理体相关联,并维护ID到C#对象的相应映射。即使有优化的映射机制,这对我来说似乎也是不必要的间接方式。
2. 利用编组C#委托(可以隐式引用C#对象实例)为C ++函数指针。这可能是最好的方法;我不知道C#如何实现委托以及这会带来什么类型的开销。
3. 查找一些其他方式来引用C#对象并将该引用与每个本机物理体相关联。
是否有像选项3这样的机制我不知道?由于我想支持没有C++ / CLI的平台,因此C ++ / CLI不是一个选项。