c ++ cli ref类数组转换为指针

Ste*_*ric 2 c# c++ interop metadata c++-cli

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

namespace MyNamespace {
    public ref class MyClass {
    public:
        static void MyMethod(double myArray[]);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我从C#应用程序引用此库时,界面已更改.如果我在C#中的类F12上,我得到了这样的重新生成的接口MyClass [from metadata];

namespace MyNamespace {
    public class MyClass {
        public static void MyMethod(double myArray*);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

更新

当我typeof(double[])在C#做的时候,我得到了;

{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"}
    ...}
Run Code Online (Sandbox Code Playgroud)

所以我理解这些意见表明我需要一个System.Array.但是,我的问题仍然存在,如何System.Double[]在互操作类中声明一个数组?简单地推杆MyMethod(System::Double[] myArray)不起作用......

Luc*_*ski 5

使用cli::array<double>^哪个是托管数组.的double something[]语法将定义的非托管阵列,其衰减到在元数据中的指针.

请参阅此处以供参考.