日期:2014-05-18  浏览次数:20868 次

做过励研superComm二次开发的人进
我现在遇到一个问题。在调用 取文件目录 SCL_GetDirItem 函数的时候出现异常
/// <summary>
  /// 取SCL_DirItemCount针对的路径的文件和子目录项。该函数必须在SCL_DirItemCount后无其他网络操作前调用。一般是先调用SCL_DirItemCount函数获得目录项数,根据目录项数申请缓冲区,然后立即调用SCL_GetDirItem函数取目录保存到刚申请的缓冲区中。
  /// </summary>
  /// <param name="nDevID">设备编号</param>
  /// <param name="ItemCount">项数,一般为SCL_DirItemCount的返回值</param>
  /// <param name="Buff">接收返回的文件和子目录名的空间指针,每个项为32字节,符合FAT16格式的32字节定义,Buff的空间大小必须大于等于ItemCount*32字节。</param>
  /// <returns>取目录成功,返回TRUE(非0),否则返回FALSE(0)</returns>
  [DllImport("SCL_API_Stdcall", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
  public static extern bool SCL_GetDirItem(short nDevID,int ItemCount,ref string Buff);

在调用SCL_DirItemCount是有值。


Buff是需要一个结构来支持
[StructLayout(LayoutKind.Sequential)]
  public struct DirItemType
  {
  [VBFixedArray(8)]
  public char[] Name; // 用空格扩展填充的文件名
  [VBFixedArray(3)]
  public char[] Ext; // 用空格扩展填充的扩展名
  public byte Attr; // 属性,$00表示普通文件, $10表示子目录
  [VBFixedArray(10)]
  public byte[] Reserved; // 保留
  public short CTTime; // 文件创建的时间, bit15-11 时, bit10-5 分, bit4-0 秒/10
  public short CTDate; // 文件创建的日期, bit15-9 年-1980, bit8-5 月, bit4-0 日
  public short Cluster; // 文件存储位置的簇号
  public int Length; // 以字节为单位的文件长度

  public void Initialize()
  {
  Name = new char[8];
  Ext = new char[3];
  Reserved = new byte[10];
  }
  }

------解决方案--------------------
帮顶。给点分
------解决方案--------------------
帮顶一下