将整数数组传递给c ++ DLL

时间:2011-10-21 10:35:47

标签: c# c++ visual-c++

C ++ dll函数声明是

static void __clrcall BubbleSort(int* arrayToSort,int size);

我的C ++ dll函数是

void Sort::BubbleSort(int* sortarray,int size)
    {
        int i,j;
        int temp=0;
       for(i=0; i< (size - 1); ++i)
        {
            for(j = i + 1; j > 0; --j)
            {
                if(sortarray[j] < sortarray[j-1])
                {
                    temp = sortarray[j];
                    sortarray[j] = sortarray[j - 1];
                    sortarray[j - 1] = temp;
                }
            }
        }
    }

在C#中,我正在访问上面的函数

Sort.Sort.BubbleSort(arrayToBeSort,5);

但是C sharp编译器给出了错误

'Sort.Sort.BubbleSort(int *,int)'的最佳重载方法匹配有一些无效的参数 和 参数1:无法从'int []'转换为'int *'

1 个答案:

答案 0 :(得分:2)

托管C ++中的数组需要使用托管语法。

static void __clrcall BubbleSort(array<int>^ arrayToSort, int size)

这可以将C#翻译为

public static void BubbleSort(int[] array, int size);

您的声明将使用指针(不安全的代码)匹配C#声明。

public static void BubbleSort(int* array, int size);

如果你需要通过引用传递一个值,你应该写这样的东西:

static void __clrcall MyFunc(array<int>^% arrayByReference)