C ++ CLI 引用类数组转换为指针
c++ cli ref class array converted to pointer
我正在尝试编写一个托管包装类,以便为本机类执行互操作和转换。我在我的互操作库中写了类似的东西;
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[]
语法将定义一个非托管数组,该数组衰减到元数据中的指针。
请参阅此处以供参考。
相关文章:
- 转换指针引用的字符串
- 无法向上转换指针到指针参数
- 混合转换指针和引用
- 堆栈对象的强制转换指针
- 基类到派生模板类的强制转换指针,而不知道类型
- 删除类型转换指针的最佳方法
- 管理到本机值类转换:强制转换指针是否安全?
- 转换指针类型
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 当我们递增下面的类型转换指针时会发生什么?
- 类型强制转换指针构造函数调用
- 如何转换(指针向量)-->(指向指针数组的指针)
- 如何从类功能转换指针
- 在C++对象中:我应该使用父类强制转换指针,还是应该使用实际类本身进行强制转换
- Delphi中的类型转换指针添加
- C++分段错误(核心转储)错误 - 强制转换指针/将函数值返回到线程
- 以C++和运算符优先级键入指向数组成员的强制转换指针
- C++动态强制转换指针的内存清理
- 转换指针和引用的好处
- 在c++中转换指针