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

如何将C++中数据类型转换为C#语言写的
typedef struct // 本结构中功能号(function)与操作方式(czfs)是必须的,其它可选
{
  unsigned short length; //长度 (整个数据包长度)
  unsigned short crc ; //CRC校验码,从serio 开始计算,暂时保留
  unsigned short serio; //序列号(按请求划分,从1开始)
  unsigned char function; //功能号
  unsigned char czfs; //操作方式(与柜台中的设置相同)
  unsigned long status; //状态 0正确 其他错误(应答有效)
}tagBLOCK_HEAD;
typedef struct
{
  tagBLOCK_HEAD HEAD; //头信息
  char KHBSLX; // '0'-'9'交易所代码(参看柜台设置)
  // 'Z' 资金帐号
  // 'C' 磁卡号
  char KHBS[31]; //KHBS 股东代码或资金帐号或磁卡号
  char JYMM[11]; //JYMM 交易密码
}tagMMJY_Request;

typedef union
{
  tagBLOCK_HEAD head;
tagMMJY_Request mmjy;

}tagREQUEST;

int WINAPI KDAPI_Request_MT(tagREQUEST &request, int nConnectionNo, unsigned int *sClientSocket=NULL);

以上是金证3.2接口部分数据结构,请问哪位高手能用C#语言给出其对应数据类型

------解决方案--------------------
tagREQUEST and tagMMJY_Request are the same thing.

C# code

[StructLayout(LayoutKind.Sequential)]
struct  BLOCK_HEAD 
{ 
  ushort length;      //长度  (整个数据包长度) 
  ushort crc ;        //CRC校验码,从serio 开始计算,暂时保留 
  ushort serio;       //序列号(按请求划分,从1开始) 
  byte function;      //功能号 
  byte czfs;          //操作方式(与柜台中的设置相同) 
  uint status;        //状态 0正确 其他错误(应答有效) 
}

[StructLayout(LayoutKind.Sequential)]
struct MMJY_Request
{ 
  BLOCK_HEAD HEAD;            // 头信息 
  char KHBSLX;                // '0'-'9'交易所代码(参看柜台设置) 
                              // 'Z' 资金帐号 
                              // 'C' 磁卡号 
  [MarshalAs(UnmanagedType.ByValArray, SizeConst=31)]
  byte[] KHBS;                // KHBS  股东代码或资金帐号或磁卡号 

  [MarshalAs(UnmanagedType.ByValArray, SizeConst=11)]
  byte[] JYMM;                // JYMM  交易密码 
}

[DllImport("...")]
extern static int KDAPI_Request_MT(ref MMJY_Request request, int nConnectionNo, ref uint sClientSocket);

------解决方案--------------------
楼上正确。