huanghua1234 2014-03-27 06:57 采纳率: 0%
浏览 3324

使用Marshal.SizeOf(typeof(Brcomm.S_BR_FILE_INFO))获取大小调试失败

各位大家好,C#调用c++ Dll调试出错,希望大家能帮助我,急。。。。。谢谢

Dll中的原数据结构
注意:如下的结构必须以1 字节为单位对齐。请在自己使用的开发语言中注意对结构进行修饰。
struct S_BR_DATETIME
{
unsigned char cYear, cMonth, cDate;
unsigned char cHour, cMin, cSec;
};
struct S_BR_FILE_INFO
{
   unsigned int iFileLength; //文件长度
   unsigned int iFileNo; //文件号
   char szFileName[32]; //文件名
   S_BR_DATETIME stCreateDateTime; //文件被创建的时间

   S_BR_DATETIME stModifyDateTime; //文件被修改的时间

};

c#引用如下
[StructLayout(LayoutKind.Sequential)]
public struct S_BR_DATETIME
{
public byte cYear;
public byte cMonth;
public byte cDate;
public byte cHour;
public byte cMin;
public byte cSec;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct S_BR_FILE_INFO
{
public UInt32 iFileLength;
public UInt32 iFileNo;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public string szFileName;
[MarshalAs(UnmanagedType.LPStruct)]
public S_BR_DATETIME stCreateDateTime; //对于结构体中的指针数组,一般采用IntPtr数组
[MarshalAs(UnmanagedType.LPStruct)]
public S_BR_DATETIME stModifyDateTime; //对于结构体中的指针数组,一般采用IntPtr数组
}

使用Marshal.SizeOf(typeof(Brcomm.S_BR_FILE_INFO))获取大小调试失败

提示“类型“SeriaportEXR.Brcomm+S_BR_FILE_INFO”不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。”

怎么解决类,急。。。。

  • 写回答

2条回答

  • yi_tianchou 2019-12-17 08:46
    关注

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string szFileName;

    评论

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多