Mono嵌入C++环境下C# Vector3构造函数Internal Call匹配错误问题求助
Mono嵌入C++环境下C# Vector3构造函数Internal Call匹配错误问题求助
各位大佬好,我最近在做Mono嵌入C++的项目,碰到了一个头疼的问题,想请大家帮忙看看。
我的实现情况
先说说我目前的代码实现:
- C# 端代码
我定义了一个Vector3类,写了三个带[MethodImpl(MethodImplOptions.InternalCall)]标记的构造函数,还有一个+运算符重载:
namespace Coral { public class Vector3 { public float x, y, z; [MethodImpl(MethodImplOptions.InternalCall)] public extern Vector3(); [MethodImpl(MethodImplOptions.InternalCall)] public extern Vector3(float scalar); [MethodImpl(MethodImplOptions.InternalCall)] public extern Vector3(float x, float y, float z); public static Vector3 operator +(Vector3 a, Vector3 b) { System.Console.WriteLine($"Adding {a.x}, {a.y}, {a.z} to {b.x}, {b.y}, {b.z}"); return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z); } } }
- C++ 端代码
我在C里注册了这三个构造函数的Internal Call,对应到C的实现函数:
mono_add_internal_call("Coral.Vector3::.ctor", ScriptingVector3::ctor_no_arg); mono_add_internal_call("Coral.Vector3::.ctor(float)", ScriptingVector3::ctor_scalar); mono_add_internal_call("Coral.Vector3::.ctor(float, float, float)", ScriptingVector3::ctor_elements);
遇到的问题
现在的问题是:当我在C#里调用+运算符时,它没有调用我期望的三个float参数的构造函数,反而调用了无参构造函数,完全搞不懂为什么会出现这种匹配错误。
我的猜测
我自己琢磨了下,怀疑是无参构造函数的注册名称是Coral.Vector3::.ctor,Mono引擎在匹配的时候可能没正确检查参数列表,直接优先匹配了这个不带参数签名的构造函数,但我实在不知道该怎么调整才能让它正确匹配到对应的构造函数。
有没有大佬遇到过类似的问题?或者能指点下我该怎么排查和修复这个问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

