C#调用C语言的库,“方法的类型签名与 PInvoke 不兼容。”
在c#中调用C语言库的函数时报错,System.Runtime.InteropServices.MarshalDirectiveException:“方法的类型签名与 PInvoke 不兼容。”
C语言代码片如下
#define MAXNAMELEN 127
//结构体
typedef struct {
uint32_t ID;
uint32_t Code;
uint32_t Num;
uint16_t Alias;
uint8_t Enable;
char ProductName[MAXNAMELEN + 1];
}INFO ;
//函数定义
INFO GET_Info(uint16_t Station);
C#调用方法如下:
//定义结构体
[StructLayout(LayoutKind.Sequential)]
public struct INFO
{
public UInt32 ID;
public UInt32 tCode;
public UInt32 Num;
public UInt16 Alias;
public Byte Enable;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string ProductName;
};
//导出库
[DllImport("seem.dll", EntryPoint = "GET_Info", CharSet = CharSet.Ansi)]
private static extern INFO GET_Info(UInt16 Station);
//调用函数
public static INFO get_Info(UInt16 station)
{
return GET_Info(station);//执行该句的时候就会抛异常:System.Runtime.InteropServices.MarshalDirectiveException:“方法的类型签名与 PInvoke 不兼容。”
}
想问下各位我是哪里出了问题,望各位指点一二