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

发布于 2024-12-11 07:54:25 字数 814 浏览 0 评论 0原文

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*'

C++ dll function declaration is

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

My C++ dll function is

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;
                }
            }
        }
    }

In C#, I am accesssing above function as

Sort.Sort.BubbleSort(arrayToBeSort,5);

But C sharp compiler gives error as

The best overloaded method match for 'Sort.Sort.BubbleSort(int*, int)' has some invalid arguments
and
Argument 1: cannot convert from 'int[]' to 'int*'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回旧景 2024-12-18 07:54:25

托管 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)

Arrays in managed C++ need to use the managed syntax.

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

This translates in C# to

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

Your declaration, instead matches the C# declaration using pointers (unsafe code).

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

If you need to pass a value by reference you should write something like this:

static void __clrcall MyFunc(array<int>^% arrayByReference)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文