c 调用c语言dll数组,在C#中使用C DLL和C DLL中的数组和指针

本文描述了一位C#新手在尝试将C语言编写的DLL函数与C#程序集成时遇到的问题,特别是如何正确传递和处理多维数组。作者分享了他们在调用DLL中的`test_function`函数时遇到的索引越界错误,并寻求解决方案,包括ref关键字的使用和内存管理。
摘要由CSDN通过智能技术生成

我是C#的新手(过去一周才开始学习).

我有一个用C语言编写的自定义DLL,具有以下功能:

DLLIMPORT void test_function (double **test)

我想要做的是从C#获得一个指针,用于数组'test'.

所以,如果在DLL函数中我有test [0] = 450.60,test [1] = 512.99等.我希望能够在我的C#程序中使用它.

在C#程序中,我有类似于:

namespace TestUtil

{

public class Echo

{

public double[] results = new double[10];

public double[] results_cpy = new double[10];

[DllImport("test_dll.dll", CallingConvention = CallingConvention.Cdecl)]

static extern unsafe void test_function(ref double[] Result);

public unsafe void Tell()

{

results[0] = 0.0;

results[1] = 0.0;

results_cpy[0] = 0.0;

results_cpy[1] = 0.0;

test_function(ref results);

results_cpy[0] = (double)results[0] + (double)results[1] ;

}

}

}

在DLL的'test_function'函数中,我使用了以下内容:

*test[0] = 450.60;

*test[1] = 512.99;

在DLL中一切都很好(我在DLL中使用了一个消息框来检查正在应用的值).回到C#程序'results [0]'似乎很好,我可以从中获取值,但'results [1]'给我一个索引超出界限的错误.我知道这个,因为如果我省略'+(double)results [1]'我没有收到任何错误.此外,如果我在DLL中没有尝试修改'test [1]',它会保留C#中的原始值(在我的示例中为0.0).

显然我没有做正确的事情,但这是我能够完全开始工作的最接近的事情.我尝试过的其他一切都失败了.

任何帮助将不胜感激.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值