C#中调用非托管的C++ Dll出现方法的类型签名与iterop不兼容的错误!!!

yao2004jessica 2010-06-19 12:43:58
我在C#中调用非托管的C++ Dll出现方法的类型签名与iterop不兼容的错误,请问如何解决呢?

C++的声明为:
void PCE_R(double * pc, double dt, double df, LPSTR fn1, LPSTR fn2);

C#中的声明为:
[DllImport("DPE.dll", CharSet = CharSet.Ansi)]
public static extern void PCE_R(ref double[] pc, double dt, double df, string fn1, string fn2);

C#中调用的地方如下:

double[] pc = new double[2];
PCE_R(ref pc, dt, df, fn1, fn2);

初步判定是C++中的第一个参数double * pc不能用C#中的ref double[] pc作为相对应的参数,
请问如何解决呢?
谢谢大家了
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yao2004jessica 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyazhe 的回复:]
你声明为intptr,传进去的是double[]?
[/Quote]

兔子-顾问 2010-06-19
  • 打赏
  • 举报
回复
你声明为intptr,传进去的是double[]?
yao2004jessica 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 computerfox 的回复:]
C/C++ code
void PCE_R(double * pc, double dt, double df, LPSTR fn1, LPSTR fn2);

c#定义应为:

C# code

[DllImport("DPE.dll", CharSet = CharSet.Ansi)]
public static extern void PCE_R(IntPtr pc, dou……
[/Quote]


用这种方法成功解决了遇到的问题

谢谢了

请问为什么用ref double[] pc不行呢?
yao2004jessica 2010-06-19
  • 打赏
  • 举报
回复
谢谢大家的鼎力相助,下午我再去试试,晚上给你们答复
兔子-顾问 2010-06-19
  • 打赏
  • 举报
回复
知道第一个参数会返回多少个元素么?
改这种声明

DllImport("DPE.dll", CharSet = CharSet.Ansi)]
public static extern void PCE_R(MarshalAs( UnmanagedType.LPArray,SizeConst = 返回长度)] double[] pc, double dt, double df, string fn1, string fn2);
捷哥1999 2010-06-19
  • 打赏
  • 举报
回复
void PCE_R(double * pc, double dt, double df, LPSTR fn1, LPSTR fn2);

c#定义应为:

[DllImport("DPE.dll", CharSet = CharSet.Ansi)]
public static extern void PCE_R(IntPtr pc, double dt, double df, string fn1, string fn2);


试试看吧

110,499

社区成员

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

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

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