c++ cli ref class 数组转换为指针
c++ cli ref class array converted to pointer
我正在尝试编写托管包装器 class 以便为本机 class 执行互操作和转换。我在我的互操作库中写了类似的东西;
namespace MyNamespace {
public ref class MyClass {
public:
static void MyMethod(double myArray[]);
}
}
但是,当我从我的 C# 应用程序中引用该库时,界面发生了变化。如果我在 C# 中的 class 上按 F12,我会得到重新生成的界面 MyClass [from metadata]
,如下所示;
namespace MyNamespace {
public class MyClass {
public static void MyMethod(double myArray*);
}
}
编译器为什么要把数组转成指针?我怎样才能让编译器正确地将此参数公开为数组而不是指针?
如果我想以这种方式使用 class,那么我将不得不在不安全的上下文中获取指向托管数组的指针,我不想这样做。
更新
当我在 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
的评论。但是,我的问题仍然存在,如何在互操作 class 中声明一个 System.Double[]
数组?简单地输入 MyMethod(System::Double[] myArray)
是行不通的...
使用 cli::array<double>^
这是一个托管数组。 double something[]
语法将定义一个非托管数组,该数组衰减为元数据中的指针。
参考here。
我正在尝试编写托管包装器 class 以便为本机 class 执行互操作和转换。我在我的互操作库中写了类似的东西;
namespace MyNamespace {
public ref class MyClass {
public:
static void MyMethod(double myArray[]);
}
}
但是,当我从我的 C# 应用程序中引用该库时,界面发生了变化。如果我在 C# 中的 class 上按 F12,我会得到重新生成的界面 MyClass [from metadata]
,如下所示;
namespace MyNamespace {
public class MyClass {
public static void MyMethod(double myArray*);
}
}
编译器为什么要把数组转成指针?我怎样才能让编译器正确地将此参数公开为数组而不是指针?
如果我想以这种方式使用 class,那么我将不得不在不安全的上下文中获取指向托管数组的指针,我不想这样做。
更新
当我在 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
的评论。但是,我的问题仍然存在,如何在互操作 class 中声明一个 System.Double[]
数组?简单地输入 MyMethod(System::Double[] myArray)
是行不通的...
使用 cli::array<double>^
这是一个托管数组。 double something[]
语法将定义一个非托管数组,该数组衰减为元数据中的指针。
参考here。