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++中。