You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mono嵌入C++环境下C# Vector3构造函数Internal Call匹配错误问题求助

Mono嵌入C++环境下C# Vector3构造函数Internal Call匹配错误问题求助

各位大佬好,我最近在做Mono嵌入C++的项目,碰到了一个头疼的问题,想请大家帮忙看看。

我的实现情况

先说说我目前的代码实现:

  1. 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);
        }
    }
}
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:34:50