[求助]C#调用c++Dll指针数组,请问如何封装。

飘零一叶 2013-06-16 10:28:31
C++代码如下:
void WINAPI CalGrad(float *OriData[15],float *ProData[12],float *Xco,float *Angle[2],int DataLength);

使用例子:
int DataLength=10;
float Data[15][10]=
{
{1,3,5,7,9,11,13,15,17,19}//距离数据
,{2,2,1,1,2,6,8,9,4,5},{2,5,7,9,0,8,2,2,1,3},{1,2,3,4,1,3,2,2,8,9}
,{1,3,2,2,4,1,3,2,2,3},{1,3,2,2,6,8,2,2,5,1},{1,5,7,4,2,6,8,9,4,3}
,{1,1,6,2,6,8,9,4,7,6},{8,9,4,34,3,2,4,9,2,1},{1,6,3,3,9,11,13,15,4,2}
,{1,5,2,3,4,1,3,2,2,2},{6,8,2,6,8,9,2,9,1,1},{1,7,2,3,5,6,7,8,3,4}
,{1,6,8,9,11,6,8,9,2,2},{8,13,45,2,13,9,6,6,3,6}//角度数据
};
float Data1[15][10];
float *tmpX[15];
float *tmpY[12];
float *Xlable;
float *Angle[2];

/**********
//初始化
***********/
for(i=0;i<15;i++)
{
tmpX[i]=new float[DataLength];
}
for(i=0;i<12;i++)
{
tmpY[i]=new float[DataLength];
}
for(i=0;i<2;i++)
{
Angle[i]=new float[DataLength];
}

Xlable=new float[DataLength];
/**********
***********/

for(i=0;i<15;i++)
{
for(j=0;j<DataLength;j++)
{
tmpX[i][j]=Data[i][j];
}
}
CalGrad(tmpX,tmpY,Xlable,Angle,DataLength);//函数调用


C#代码
        [DllImport("DSP_DLL.dll", EntryPoint = "CalGrad", SetLastError = true,
CharSet = CharSet.Auto, ExactSpelling = false,
CallingConvention = CallingConvention.Winapi)]
public static extern void CalGrad(ref System.Single[,] OriData, ref System.Single[,] ProData, ref System.Single[] Xco, ref System.Single[,] Angle, int DataLength);


出现错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”,请问如何处理。
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aSalt 2013-06-16
  • 打赏
  • 举报
回复
看的都真仔细,,,
飘零一叶 2013-06-16
  • 打赏
  • 举报
回复
引用 2 楼 Chinajiyong 的回复:
[DllImport("DSP_DLL.dll", EntryPoint = "CalGrad", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)] public static extern void CalGrad(ref System.Single[,] OriData, ref System.Single[,] ProData, ref System.Single[] Xco, ref System.Single[,] Angle, int DataLength); 红的部分应该是一维数组把,Single[,]这个是二维数组
这个参数是个指针数组,每个指针指向的一个一维数组的首地址。
EnForGrass 2013-06-16
  • 打赏
  • 举报
回复
[DllImport("DSP_DLL.dll", EntryPoint = "CalGrad", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Winapi)] public static extern void CalGrad(ref System.Single[,] OriData, ref System.Single[,] ProData, ref System.Single[] Xco, ref System.Single[,] Angle, int DataLength); 红的部分应该是一维数组把,Single[,]这个是二维数组

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧