C ++ CLI 引用类数组转换为指针

c++ cli ref class array converted to pointer

本文关键字:转换 指针 数组 CLI 引用      更新时间:2023-10-16

我正在尝试编写一个托管包装类,以便为本机类执行互操作和转换。我在我的互操作库中写了类似的东西;

namespace MyNamespace {
    public ref class MyClass {
    public:
        static void MyMethod(double myArray[]);
    }
}

但是,当我从 C# 应用程序引用此库时,接口已更改。如果我在 C# 中的类上按 F12,我会得到重新生成的接口MyClass [from metadata]如下所示;

namespace MyNamespace {
    public class MyClass {
        public static void MyMethod(double myArray*);
    }
}

为什么编译器将数组转换为指针?如何让编译器正确地将此参数公开为数组而不是指针?

如果我想以这种方式使用类,那么我必须在不安全的上下文中获取指向托管数组的指针,这是我不想这样做的。

更新

当我用 C# typeof(double[])时,我得到;

{Name = "Double[]" FullName = "System.Double[]"}
    Assembly: {mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
    AssemblyQualifiedName: "System.Double[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    Attributes: Public | Sealed | Serializable
    BaseType: {Name = "Array" FullName = "System.Array"}
    ...}

所以我理解这些评论表明我需要System.Array.但是,我的问题仍然存在,如何在互操作类中声明System.Double[]数组?简单地放MyMethod(System::Double[] myArray)是行不通的...

使用 cli::array<double>^ 它是一个托管数组。double something[]语法将定义一个非托管数组,该数组衰减到元数据中的指针。

请参阅此处以供参考。