当前位置:首页 > .NET > C#

C#调C++写的DLL函数,出现“方法的类型签名与PInvoke不兼容异常”

优良自学吧提供C#调C++写的DLL函数,出现“方法的类型签名与PInvoke不兼容异常”,C#调C++写的DLL函数,出现“方法的类型签名与PInvoke不兼容错误”我在c++中定义的两个结构体: struct PassInput { int sfc; float rmThick; float wrdiam[7]; } struct 

C#调C++写的DLL函数,出现“方法的类型签名与PInvoke不兼容错误”
我在c++中定义的两个结构体:
struct PassInput
{
int sfc;
float rmThick;
float wrdiam[7];
}

struct PassOutput
{
float  eps[7];
float rf[7];
}

调用函数接口: PassOutput  precalc2(PassInput indata)

然后我在C#中定义了结构体:
 public struct PassInput
       {
           public int  sfc; 
           public float  rmThick;
           public float[] wrdiam;
       }
 public  struct PassOutput

public float[] eps;
 public float[] rf;
}

 [DllImport("FMPreLib.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern  PassOutput precalc2( PassInput indata);

然后调用代码:
  outdata = precalc2( indata);

最后调试时在上面这句代码出错:方法的类型签名与PInvoke不兼容错误


我是新手,上网看好像是因为C#调用DLL文件时传递结构体出错,应该怎么改?大神帮帮忙啊、、
------解决思路----------------------
c++的定义改成
PassOutput* precalc2(PassInput* indata)


c#
[StructLayout(LayoutKind.Sequential)]
public struct PassInput
{
public int sfc;
public float rmThick;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
public float[] wrdiam;
}

[StructLayout(LayoutKind.Sequential)]
public struct PassOutput
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
public float[] eps;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
public float[] rf;
}

[DllImport("FMPreLib.dll", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr _precalc2(IntPtr indata);

public static PassOutput precalc2(PassInput input)
{
IntPtr indata = IntPtr.Zero;
IntPtr outdata = IntPtr.Zero;
Marshal.StructureToPtr(input, indata, false);
outdata = _precalc2(indata);
return (PassOutput)Marshal.PtrToStructure(outdata, typeof(PassOutput));
}

------解决思路----------------------
http://www.soaspx.com/dotnet/csharp/csharp_20101230_6998.html
http://bbs.csdn.net/topics/390191887
------解决思路----------------------
http://bbs.csdn.net/topics/390191887
------解决思路----------------------
结构体调用,
可以参考这个帖子
http://bbs.csdn.net/topics/391025623
(本文来自互联网,不代表搜站(http://www.ylzx8.cn/)的观点和立场)
本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(ylzx8cn@163.com),我们会及时处理和回复,谢谢