几许。 2023-11-23 19:19 采纳率: 0%
浏览 14

C#调用C语言的库,“方法的类型签名与 PInvoke 不兼容。”

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 不兼容。”
 
}

想问下各位我是哪里出了问题,望各位指点一二

  • 写回答

4条回答 默认 最新

  • micthis 2023-11-23 19:25
    关注

    c#的INFO前面的struct呢

    评论

报告相同问题?

问题事件

  • 修改了问题 11月23日
  • 创建了问题 11月23日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证