我目前正在使用导入的C#包在CLI / C ++中编写程序。我需要使用其中一个接收数组的C#对象中的一个函数。不幸的是,它不允许我使用CLI数组,定义如下:
array<float>^ knots = gcnew array<float>(nurbs->GetNumKnots());
(然后在循环中填充)。
对象和功能是:
TRH::NURBSCurveKit^ nurbsKit = gcnew TRH::NURBSCurveKit();
nurbsKit->SetKnots(nurbs->GetNumKnots(), knots);
这会返回一个错误,主要是说cli :: array类型不兼容。有谁知道我可以投射数组的方式,或者可能以不同的方式定义它?
我对CLI很陌生,所以我对它处理事情的方式有点模糊。
由于
(我后来使用TRH :: Points数组做类似的事情,但它们没有被定义为引用或指针,所以我不确定它们是否可以使用任何解决方案。)
答案 0 :(得分:1)
我不确定它是否与NURBSCurveKit
相同,但根据我发现的online API reference,SetKnots
方法需要一个参数,而不是两个参数。由于托管数组知道它有多长,因此通常不必传入带有数组的长度。
如果这与您的API匹配,只需切换为将单个参数传递给SetKnots
。 (我发现的引用使用了不同的命名空间,因此它可能不是您正在使用的。)
array<float>^ knots = gcnew array<float>(nurbs->GetNumKnots());
TRH::NURBSCurveKit^ nurbsKit = gcnew TRH::NURBSCurveKit();
nurbsKit->SetKnots(knots);
答案 1 :(得分:0)
这是我的测试用例,似乎一切都很好。
C#
namespace CS
{
public class Test
{
public int GetNum()
{
return 5;
}
public void ShowArray(int num, float[] arr)
{
for (int i = 0; i < num; i++)
{
Console.WriteLine("[{0}] = {1}",i,arr[i]);
}
}
}
}
C ++ / CLI
using namespace System;
using namespace CS;
int main(array<System::String ^> ^args)
{
Test^ test = gcnew Test();
array<float>^ arr = gcnew array<float>(test->GetNum());
for (int i = 0; i < test->GetNum(); i ++)
{
arr[i] = (float)i * i;
}
test->ShowArray(test->GetNum(), arr);
Console::ReadKey();
return 0;
}
您的代码与我的代码有什么不同?