如何将无符号长*params转换为ulong[]params
How to convert unsigned long * params to ulong[] params
我有一个非托管代码,它是一种类型:
unsigned long *inputParameters
我需要将我的可变输入参数转换为C#类型的
ulong[] inputParameters
我尝试过不同类型的转换,比如
auto inputParams = *((unsigned long*)inputParameters)
&inputParameters
然而,我得到了这个例外:
无法将参数从"unsigned long*"转换为"cli::array<无符号__int64,1>^'
C#中已知为引用类型的任何类型都需要使用gcnew
关键字进行实例化,数组也不例外。大多数价值类型都是在幕后被掠夺的,所以你通常可以在没有任何选角或欺骗的情况下,将管理者分配给未管理者,反之亦然。魔术,我知道!有一些例外,但编译器会让您知道是否存在问题。
我假设*inputParameters
是一个指针列表(而不是指向单个值的指针(,这意味着您应该有一个包含列表中元素数量的变量,让我们称之为nElements
。要进行转换,您可以执行以下操作:
//some test data
int nElements = 10;
unsigned long *inputParameters = (unsigned long *)malloc(sizeof(unsigned long) * nElements);
for (int i = 0; i < nElements; i++)
{
*(inputParameters + i) = i * 2;//just arbitrary values
}
//now create a .NET array (lines below directly solve your question)
array<UInt64, 1>^ managedArray = gcnew array<UInt64, 1>(nElements);
for (int i = 0; i < nElements; i++)
{
tempArray[i] = *(inputParameters + i);//this will be marshalled under the hood correctly.
}
//now the array is ready to be consumed by C# code.
这里,array<UInt64, 1>^
是C#的ulong[]
的C++/CLI等价物。您可以将managedArray
返回到来自C#的方法调用,该方法调用需要ulong[]
作为返回类型。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- C++使用params创建线程函数会导致转换错误
- 如何将无符号长*params转换为ulong[]params
- 有没有一种干净的方法可以将 C# 'params object[]' 构造函数参数转换为C++构造函数?