c#中向c++ dll中传递多维数组

c#里面的代码:

//首先引用c++的dll
[DLLImport("SHPHX.dll")]
public extern unsafe static void GetExplorerUserDefinedPropData(double*[] dPower,double*[] dRange,int iPower,int iRange)


double[,] dPower=new double[2,6];//定义二维数组,两行六列;
double[,] dRange=new double[2,2];//定义二维数组,两行两列;

dPower={{1,2,3,4,5,6},{7,8,9,10,11,12}};
dRange={{1,2},{3,4}};

int rowdPower=dPower.GetUpperBound(0)+1;//获取第一维度的元素的最后一个元素的索引,加1是因为获取的是第一维度的元素数,即行数;
int  coldPower=dPower.GetUpperBound(1)+1;//获取第二维度的元素的最后一个元素的索引,加1是因为获取的是第二维度的元素数,即列数;

int rowdRange=dRange.GetUpperBound(0)+1;
int coldRange=dRange.GetUpperBound(1)+1;

unsafe
{
    double* [] Power=new double*[rowdPower];
    double* [] Range=new double*[rowdRange];//定义指针数组,存放二维数组中每一个一维数组的地址

    fixed(double* fp=dPower)
    {
        for(int i=0;i<rowdPower;i++)
        {
            Power[i]=fp+i*coldPower;//获取dPower中每一个数组的地址;
        }
    }
    
    fixed(double* fp2=dRange)
    {
        for(int i=0;i<rowdRange;i++)
        {
            Range[i]=fp2+i*coldRange;//获取dRange中每一个数组的地址;
        }
    }
}

//调用C++的dll
GetExplorerUserDefinedPropData(Power,Range,rowdPower,rowRange)

c++里面的代码

GetUserDefinedExplorerPropData(double* dPower[],double* dRange[],int iPower,int iRange)
{
    for(int i=0;i<iPower;i++)
    {
        for(int j=0;j<6;j++)//这里也可以将一维数组中的元素个数传进来;
        {
            Console.Write(dPower[i][j]+"\t");//输出dPower数组中的每一个一维数组中的数字
        }
        Console.WriteLine();
    }

     for(int i=0;i<iRange;i++)
    {
        for(int j=0;j<2;j++)
        {
            Console.Write(dRange[i][j]+"\t");//输出dRange数组中的每一个一维数组中的数字
        }
        Console.WriteLine();
    }
}

以上就可以实现将二维数组传进c++中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值