如何将 unsigned long * params 转换为 ulong[] params
How to convert unsigned long * params to ulong[] params
我有一个非托管代码,它是一种类型:
unsigned long *inputParameters
我需要将我的变量输入参数转换为 C# 类型
ulong[] inputParameters
我尝试过不同类型的转化,例如
auto inputParams = *((unsigned long*)inputParameters)
&inputParameters
但是我遇到了这个异常:
cannot convert argument from 'unsigned long *' to 'cli::array<unsigned __int64,1> ^'
任何在 C# 中称为引用类型的类型都需要使用 gcnew
关键字进行实例化,数组也不例外。大多数值类型都在幕后编排,因此您通常可以将 managed 分配给 unmanged ,反之亦然,而无需任何转换或欺骗。魔术,我知道!有一些例外,但如果有问题,编译器会通知您。
我假设 *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 等价物。您可以 return managedArray
到 C# 的方法调用,它期望 ulong[]
作为 return 类型。
我有一个非托管代码,它是一种类型:
unsigned long *inputParameters
我需要将我的变量输入参数转换为 C# 类型
ulong[] inputParameters
我尝试过不同类型的转化,例如
auto inputParams = *((unsigned long*)inputParameters)
&inputParameters
但是我遇到了这个异常:
cannot convert argument from 'unsigned long *' to 'cli::array<unsigned __int64,1> ^'
任何在 C# 中称为引用类型的类型都需要使用 gcnew
关键字进行实例化,数组也不例外。大多数值类型都在幕后编排,因此您通常可以将 managed 分配给 unmanged ,反之亦然,而无需任何转换或欺骗。魔术,我知道!有一些例外,但如果有问题,编译器会通知您。
我假设 *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 等价物。您可以 return managedArray
到 C# 的方法调用,它期望 ulong[]
作为 return 类型。