C#函数不接受C ++中的CLI数组

时间:2013-12-05 12:31:57

标签: c# c++-cli

我目前正在使用导入的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数组做类似的事情,但它们没有被定义为引用或指针,所以我不确定它们是否可以使用任何解决方案。)

2 个答案:

答案 0 :(得分:1)

我不确定它是否与NURBSCurveKit相同,但根据我发现的online API referenceSetKnots方法需要一个参数,而不是两个参数。由于托管数组知道它有多长,因此通常不必传入带有数组的长度。

如果这与您的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;
}

您的代码与我的代码有什么不同?