Передача целочисленного массива в c ++ DLL - PullRequest
0 голосов
/ 21 октября 2011

Объявление функции 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 Ответ

2 голосов
/ 21 октября 2011

Массивы в управляемом 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)
...