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

用C#弄过通视股票驱动接口的朋友请进
最近在弄一个股票软件。需要调用通视股票驱动接口dll取得软件要用的数据。现在即时的行情已经成功获取了。但是在获取历史数据的时候就死活获取不了,取回来的东西都是乱码。弄得头都大了,希望弄过的朋友可以帮一下忙,谢谢。
下面帖出我写的代码,不知道是不是我的代码有问题。

  //重写消息循环,获取捕获的股票消息
  protected override void WndProc(ref Message m)
  {
  RCV_DATA data;

  if (m.Msg == TSMSG && Drvloaded)
  {
  data = (RCV_DATA)m.GetLParam(typeof(RCV_DATA));
  switch (m.WParam.ToInt32())
  {
  //取即时行情 这里已成功取得即时行情,没有任何问题
  case RCV_REPORT:
  for (int i = 0; i < data.m_nPacketNum; i++)
  {
  RCV_REPORT_STRUCTExV3 report = (RCV_REPORT_STRUCTExV3)Marshal.PtrToStructure(new IntPtr((int)data.ptr + 158 * i), typeof(RCV_REPORT_STRUCTExV3));
  TraderCommon.InstantMarket.UpdateItem(report);
  }
  break;
  case RCV_FILEDATA:
  switch (data.m_wDataType)
  {
  // 补日线数据; 
  case FILE_HISTORY_EX:
  //这里出了问题,获取的数据有问题,乱码
  for (int i = 0; i < data.m_nPacketNum; i++)
  {
  RCV_HISTORY_STRUCTEx history = (RCV_HISTORY_STRUCTEx)Marshal.PtrToStructure(data.ptr, typeof(RCV_HISTORY_STRUCTEx));
  this.Text = history.m_head.m_szLabel;
  }
  break;
  // 补分钟线数据;
  case FILE_MINUTE_EX:
  //RCV_HISTORY_STRUCTEx_tag taginfo = (RCV_HISTORY_STRUCTEx_tag)Marshal.PtrToStructure(data.ptr, typeof(RCV_HISTORY_STRUCTEx_tag));
  break;
  }
  break;
  }
  }
  base.WndProc(ref m);
  }



历史数据类:
  [StructLayout(LayoutKind.Explicit)]
  public struct RCV_HISTORY_STRUCTEx
  {
  [FieldOffset(0)]
  public HistoryData H;

  [FieldOffset(40)]
  public RCV_EKE_HEADEx m_head;
  }

HistoryData类:
  [StructLayout(LayoutKind.Explicit)]
  public struct HistoryData
  {
  [FieldOffset(0)]
  public long m_time; //时间
  [FieldOffset(8)]
  public float m_fOpen; //开盘
  [FieldOffset(12)]
  public float m_fHigh; //最高
  [FieldOffset(16)]
  public float m_fLow; //最低
  [FieldOffset(20)]
  public float m_fClose; //收盘
  [FieldOffset(24)]
  public float m_fVolume; //量
  [FieldOffset(28)]
  public float m_fAmount; //额
  [FieldOffset(32)]
  public ushort m_wAdvance; //涨数,仅大盘有效
  [FieldOffset(34)]
  public ushort m_wDecline; //跌数,仅大盘有效
  }

RCV_EKE_HEADEx类:
  [StructLayout(LayoutKind.Sequential)]
  public struct RCV_EKE_HEADEx
  {
  public System.UInt32 m_dwHeadTag; // = EKE_HEAD_TAG
  public System