请高数指教,银江或数畅的数据接口C#程序代码

Discussion in 'General Topics on Software and Data' started by junxian_chen, Nov 12, 2009.

  1. 本人做银江的数据接口C#程序时,在Stock_Init初始化后,银江启动,但无法接收到数据,但用飞狐却能正常使用,不知道什么原因,请高手指教。以下是代码:这个

    public partial class StockAdapter : Form
    {

    private const int RCV_WORK_SENDMSG = 4; // 版本 2 建议使用的方式
    // 其他工作方式保留

    // 消息类型
    private const int RCV_REPORT = 0x3f001234;
    private const int RCV_FILEDATA = 0x3f001235;
    private const int RCV_FENBIDATA = 0x3f001301;

    private const string TS_StockDrv_IdTxt = "TongShi_StockDrv_2.00"; // 通视信息卡特征串

    //==================================== 数据结构 =================================================
    // 证券市场
    private const ushort SH_MARKET_EX = 18515; //"HS"; 上海
    private const ushort SZ_MARKET_EX = 23123; //"ZS"; 深圳
    private const string HK_MARKET_EX = "KH"; // 'HK' 香港


    // 文件数据类型
    // 结构数组形式的文件数据
    private const int FILE_HISTORY_EX = 2; // 补日线数据
    private const int FILE_MINUTE_EX = 4; // 补分时线数据
    private const int FILE_POWER_EX = 6; // 补充除权数据
    private const int FILE_MIN5_EX = 81; // 补5分钟数据
    private const int FILE_MIN1_EX = 82; // 补1分钟数据
    private const int FILE_STROKE_EX = 83; // 分笔数据

    private const int FILE_MULTISORT_EX = 0x708; // 综合排名
    private const int FILE_DETAIL_EX = 0x709; // 成交明细

    private const int FILE_BASE_EX = 0x1000; // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
    private const int FILE_NEWS_EX = 0x1002; // 新闻类,其类型由m_szFileName中子目录名来定
    private const int FILE_HTML_EX = 0x1004; // HTML文件,m_szFileName为URL

    private const int FILE_SOFTWARE_EX= 0x2000; // 升级软件

    private const int FILE_SHAZQDATA_EX= 0x3000; // 上海债券净价交易

    private const int FILE_TYPE_RES = -1; // 保留

    // 消息子类型
    private const int News_Sha_Ex = 2; // 上证消息
    private const int News_Szn_Ex = 4; // 深证消息
    private const int News_Fin_Ex = 6; // 财经报道
    private const int News_TVSta_Ex = 8; // 电视台通知
    private const int News_Unknown_Ex = -1; // 未知提供者

    //Definition For nInfo of Function GetStockDrvInfo(int nInfo,void * pBuf);
    private const int RI_IDSTRING = 1; // 厂商名称,返回(LPCSTR)厂商名
    private const int RI_IDCODE = 2; // 卡号
    private const int RI_VERSION = 3; // 驱动程序版本
    private const int RI_ERRRATE = 4; // 取信道误码
    private const int RI_STKNUM = 5; // 取上市股票总家数
    private const int RI_SUPPORTEXTHQ = 6; // 是否支持JSJ格式
    private const int RI_ENABLEDZHTRANS = 7; // 支持传输大智慧文件系统
    private const int RI_ENABLETS3FILE = 8; // 支持文件传输
    private const int RI_NETPCID = -1; // 返回电脑硬件编号


    private const int RI_HASASKDATA = 0x1000; //双向支持,待定
    private const int RI_HIGHSPEED = 0x1002; //如果分析软件处理数据足够快,可以要求系统高速初始化代码


    private const int STKLABEL_LEN = 10; // 股号数据长度,国内市场股号编码兼容钱龙
    private const int STKNAME_LEN = 32; // 股名长度
    private const int STKLABEL_LEN_SKY = 48;

    //消息
    private const int My_Msg_StkData = 0x8000 + 1;


    //国债净价交易数据
    [StructLayout(LayoutKind.Sequential)]
    public struct GzLxBINData
    {
    public ushort m_wMarket; // 股票市场类型
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = STKLABEL_LEN)]
    public char[] m_szLabel; // 股票代码,以'\0'结尾
    public uint m_LiXiDate; //开始计算利息的日期
    public double m_fMoney100; //每100元的利息
    public uint m_DayNum; //利息计算天数
    public Single m_fShowPrice; //票面价格
    }

    [Flags]
    enum BYTE : byte
    {
    m_Dec = 4,
    m_Enabled = 1,
    m_VolFlag = 1,
    m_Other = 2
    }

    //[StructLayout(LayoutKind.Explicit)]
    //public class RCV_REPORT_STRUCTEx
    //{
    // [FieldOffset(0)]
    // public ushort m_cbSize; // 结构大小
    // [FieldOffset(2)]
    // public uint m_time; // 交易时间
    // [FieldOffset(6)]
    // public ushort m_wMarket; // 股票市场类型

    // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)]
    // [FieldOffset(8)]
    // public char[] m_szLabelName; // 股票代码,以'\0'结尾

    // //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKLABEL_LEN)]
    // //public string m_szLabel; // 股票代码,以'\0'结尾
    // //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKNAME_LEN - 15)]
    // //public string m_szName; // 股票名称,以'\0'结尾

    // //[FieldOffset(35)]
    // //BYTE BYTE;

    // ////BYTE m_Dec:4;
    // ////BYTE m_Enabled:1;
    // ////BYTE m_VolFlag:1;
    // ////BYTE m_Other:2;

    // //[FieldOffset(36)]
    // //public ushort m_ID;
    // //[FieldOffset(38)]
    // //public Single m_fOpenInterest;
    // //[FieldOffset(42)]
    // //public Single m_fLastOpenInterest;
    // //[FieldOffset(46)]
    // //public Single m_fLastSettle;

    // [FieldOffset(50)]
    // public Single m_fLastClose; // 昨收
    // [FieldOffset(54)]
    // public Single m_fOpen; // 今开
    // [FieldOffset(58)]
    // public Single m_fHigh; // 最高
    // [FieldOffset(62)]
    // public Single m_fLow; // 最低
    // [FieldOffset(66)]
    // public Single m_fNewPrice; // 最新
    // [FieldOffset(70)]
    // public Single m_fVolume; // 成交量
    // [FieldOffset(74)]
    // public Single m_fAmount; // 成交额

    // [FieldOffset(78)]
    // public Single m_fBuyPrice1; // 申买价1
    // [FieldOffset(82)]
    // public Single m_fBuyPrice2; // 申买价2
    // [FieldOffset(86)]
    // public Single m_fBuyPrice3; // 申买价3

    // [FieldOffset(90)]
    // public Single m_fBuyVolume1; // 申买量1
    // [FieldOffset(94)]
    // public Single m_fBuyVolume2; // 申买量2
    // [FieldOffset(98)]
    // public Single m_fBuyVolume3; // 申买量3

    // [FieldOffset(102)]
    // public Single m_fSellPrice1; // 申卖价1
    // [FieldOffset(106)]
    // public Single m_fSellPrice2; // 申卖价2
    // [FieldOffset(110)]
    // public Single m_fSellPrice3; // 申卖价3

    // [FieldOffset(114)]
    // public Single m_fSellVolume1; // 申卖量1
    // [FieldOffset(118)]
    // public Single m_fSellVolume2; // 申卖量2
    // [FieldOffset(122)]
    // public Single m_fSellVolume3; // 申卖量3

    // //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    // //public Single[] m_fBuyPrice; // 申买价1,2,3
    // //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    // //public Single[] m_fBuyVolume; // 申买量1,2,3
    // //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    // //public Single[] m_fSellPrice; // 申卖价1,2,3
    // //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    // //public Single[] m_fSellVolume; // 申卖量1,2,3

    // [FieldOffset(126)]
    // public Single m_fBuyPrice4; // 申买价4
    // [FieldOffset(130)]
    // public Single m_fBuyVolume4; // 申买量4
    // [FieldOffset(134)]
    // public Single m_fSellPrice4; // 申卖价4
    // [FieldOffset(138)]
    // public Single m_fSellVolume4; // 申卖量4

    // [FieldOffset(142)]
    // public Single m_fBuyPrice5; // 申买价5
    // [FieldOffset(146)]
    // public Single m_fBuyVolume5; // 申买量5
    // [FieldOffset(150)]
    // public Single m_fSellPrice5; // 申卖价5
    // [FieldOffset(154)]
    // public Single m_fSellVolume5; // 申卖量5
    // //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
    // //public string m_szName2;
    // //public long m_IName;
    //}

    [StructLayout(LayoutKind.Explicit)]
    public struct RCV_REPORT_STRUCTEx
    {
    [FieldOffset(0)]
    public System.UInt16 m_cbSize; // 结构大小
    [FieldOffset(2)]
    public System.UInt32 m_time; // 成交时间
    [FieldOffset(6)]
    public System.UInt16 m_wMarket; // 股票市场类型

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)]
    [FieldOffset(8)]
    public char[] m_szLabelName; // 股票代码,以'\0'结尾
    //
    // [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=32 )]
    // [ FieldOffset( 18 )]public string m_szName; // 股票名称,以'\0'结尾
    // [ MarshalAs( UnmanagedType.ByValArray, SizeConst=STKLABEL_LEN-1 )]
    // public char[] m_szLabel; // 股票代码,以'\0'结尾
    // [ MarshalAs( UnmanagedType.ByValArray, SizeConst=STKNAME_LEN-1 )]
    // public char[] m_szName; // 股票名称,以'\0'结尾

    [FieldOffset(50)]
    public System.Single m_fLastClose; // 昨收
    [FieldOffset(54)]
    public System.Single m_fOpen; // 今开
    [FieldOffset(58)]
    public System.Single m_fHigh; // 最高
    [FieldOffset(62)]
    public System.Single m_fLow; // 最低
    [FieldOffset(66)]
    public System.Single m_fNewPrice; // 最新
    [FieldOffset(70)]
    public System.Single m_fVolume; // 成交量
    [FieldOffset(74)]
    public System.Single m_fAmount; // 成交额

    // [ MarshalAs( UnmanagedType.ByValArray, SizeConst=3 )]
    [FieldOffset(78)]
    public System.Single m_fBuyPrice1; // 申买价1
    [FieldOffset(82)]
    public System.Single m_fBuyPrice2; // 申买价2
    [FieldOffset(86)]
    public System.Single m_fBuyPrice3; // 申买价3
    [FieldOffset(90)]
    public System.Single m_fBuyVolume1; // 申买量1
    [FieldOffset(94)]
    public System.Single m_fBuyVolume2; // 申买量2
    [FieldOffset(98)]
    public System.Single m_fBuyVolume3; // 申买量3
    [FieldOffset(102)]
    public System.Single m_fSellPrice1; // 申卖价1
    [FieldOffset(106)]
    public System.Single m_fSellPrice2; // 申卖价2
    [FieldOffset(110)]
    public System.Single m_fSellPrice3; // 申卖价3
    [FieldOffset(114)]
    public System.Single m_fSellVolume1; // 申卖量1
    [FieldOffset(118)]
    public System.Single m_fSellVolume2; // 申卖量2
    [FieldOffset(122)]
    public System.Single m_fSellVolume3; // 申卖量3

    // [ MarshalAs( UnmanagedType.ByValArray, SizeConst=3 )]
    // [ FieldOffset( 0 )]public System.Single[] m_fBuyVolume; // 申买量1,2,3
    // [ MarshalAs( UnmanagedType.ByValArray, SizeConst=3 )]
    // [ FieldOffset( 0 )]public System.Single[] m_fSellPrice; // 申卖价1,2,3
    // [ MarshalAs( UnmanagedType.ByValArray, SizeConst=3 )]
    // [ FieldOffset( 0 )]public System.Single[] m_fSellVolume; // 申卖量1,2,3

    [FieldOffset(126)]
    public System.Single m_fBuyPrice4; // 申买价4
    [FieldOffset(130)]
    public System.Single m_fBuyVolume4; // 申买量4
    [FieldOffset(134)]
    public System.Single m_fSellPrice4; // 申卖价4
    [FieldOffset(138)]
    public System.Single m_fSellVolume4; // 申卖量4

    [FieldOffset(142)]
    public System.Single m_fBuyPrice5; // 申买价5
    [FieldOffset(146)]
    public System.Single m_fBuyVolume5; // 申买量5
    [FieldOffset(150)]
    public System.Single m_fSellPrice5; // 申卖价5
    [FieldOffset(154)]
    public System.Single m_fSellVolume5;
    }


    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_REPORT_STRUCTEx1
    {
    public ushort m_wMarket; // 股票市场类型
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKLABEL_LEN)]
    public string m_szLabel; // 股票代码,以'\0'结尾
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKNAME_LEN - 15)]
    public string m_szName; // 股票名称,以'\0'结尾
    BYTE BYTE;
    //BYTE m_Dec:4;
    //BYTE m_Enabled:1;
    //BYTE m_VolFlag:1;
    //BYTE m_Other:2;
    public ushort m_ID;
    public Single m_fOpenInterest;
    public Single m_fLastOpenInterest;
    public Single m_fLastSettle;

    public Single m_fLastClose; // 昨收
    public Single m_fOpen; // 今开
    public Single m_fHigh; // 最高
    public Single m_fLow; // 最低
    public Single m_fNewPrice; // 最新
    public Single m_fVolume; // 成交量
    public Single m_fAmount; // 成交额

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fBuyPrice; // 申买价1,2,3
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fBuyVolume; // 申买量1,2,3
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fSellPrice; // 申卖价1,2,3
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fSellVolume; // 申卖量1,2,3
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_REPORT_STRUCTEx2
    {
    public ushort m_cbSize; // 结构大小
    public ulong m_time; // 交易时间
    public ushort m_wMarket; // 股票市场类型
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKLABEL_LEN)]
    public string m_szLabel; // 股票代码,以'\0'结尾
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKNAME_LEN - 15)]
    public string m_szName; // 股票名称,以'\0'结尾
    BYTE BYTE;

    //BYTE m_Dec:4;
    //BYTE m_Enabled:1;
    //BYTE m_VolFlag:1;
    //BYTE m_Other:2;
    public ushort m_ID;
    public Single m_fOpenInterest;
    public Single m_fLastOpenInterest;
    public Single m_fLastSettle;

    public Single m_fLastClose; // 昨收
    public Single m_fOpen; // 今开
    public Single m_fHigh; // 最高
    public Single m_fLow; // 最低
    public Single m_fNewPrice; // 最新
    public Single m_fVolume; // 成交量
    public Single m_fAmount; // 成交额

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fBuyPrice; // 申买价1,2,3
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fBuyVolume; // 申买量1,2,3
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fSellPrice; // 申卖价1,2,3
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public Single[] m_fSellVolume; // 申卖量1,2,3

    public Single m_fBuyPrice4; // 申买价4
    public Single m_fBuyVolume4; // 申买量4
    public Single m_fSellPrice4; // 申卖价4
    public Single m_fSellVolume4; // 申卖量4

    public Single m_fBuyPrice5; // 申买价5
    public Single m_fBuyVolume5; // 申买量5
    public Single m_fSellPrice5; // 申卖价5
    public Single m_fSellVolume5; // 申卖量5
    }

    //////////////////////////////////////////////////////////////////////////////////
    //补充数据头
    private const uint EKE_HEAD_TAG = 0xffffffff;

    //[StructLayout(LayoutKind.Explicit)]
    //public struct RCV_EKE_HEADEx
    //{
    // [FieldOffset(0)]
    // public System.UInt32 m_dwHeadTag; // = EKE_HEAD_TAG
    // [FieldOffset(4)]
    // public System.UInt16 m_wMarket; // 市场类型
    // [FieldOffset(8)]
    // [MarshalAs(UnmanagedType.ByValArray, SizeConst = STKLABEL_LEN)]
    // public char[] m_szLabel; // 股票代码
    //}

    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_EKE_HEADEx
    {
    public System.UInt32 m_dwHeadTag; // = EKE_HEAD_TAG
    public System.UInt16 m_wMarket; // 市场类型
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = STKLABEL_LEN)]
    public string m_szLabel; // 股票代码
    }


    //补充日线数据
    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_HISTORY_STRUCTEx
    {
    public uint m_time;
    public Single m_fOpen; //开盘
    public Single m_fHigh; //最高
    public Single m_fLow; //最低
    public Single m_fClose; //收盘
    public Single m_fVolume; //量
    public Single m_fAmount; //额
    public ushort m_wAdvance; //涨数,仅大盘有效
    public ushort m_wDecline; //跌数,仅大盘有效
    //[FieldOffset(32)]
    //public Single m_fOI;

    //[FieldOffset(0)]
    //public RCV_EKE_HEADEx m_head;
    }


    //补充分时线数据
    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_MINUTE_STRUCTEx
    {
    public uint m_time; // UCT
    public Single m_fPrice;
    public Single m_fVolume;
    public Single m_fAmount;
    //public RCV_EKE_HEADEx m_head;
    }


    //补充除权数据
    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_POWER_STRUCTEx
    {
    public uint m_time; // UCT
    public Single m_fGive; // 每股送
    public Single m_fPei; // 每股配
    public Single m_fPeiPrice; // 配股价,仅当 m_fPei!=0.0f 时有效
    public Single m_fProfit; // 每股红利

    //public RCV_EKE_HEADEx m_head;
    }


    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_SHAGZ
    {
    public ushort m_wMarket; // 市场类型
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = STKLABEL_LEN)]
    public char[] m_szLabel; // 股票代码
    public uint m_StartDate; //开始计算利息的日期 YYMMDD format
    public double m_fLiXi100RMB; //票面100员的
    public ushort m_DayNum;
    public Single m_fPrice;
    }

    //分笔数据///////////////////////////////////
    [StructLayout(LayoutKind.Sequential)]
    public struct YJFenbi
    {
    public long m_lTime; // hhmmss 例:93056 表明9:30:56的盘口数据

    public Single m_fHigh; // 最高
    public Single m_fLow; // 最低
    public Single m_fNewPrice; // 最新
    public Single m_fVolume; // 成交量
    public Single m_fAmount; // 成交额

    public long m_lStroke; // 保留

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
    public Single[] m_fBuyPrice; // 申买价1,2,3,4,5
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
    public Single[] m_fBuyVolume; // 申买量1,2,3,4,5
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
    public Single[] m_fSellPrice; // 申卖价1,2,3,4,5
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
    public Single[] m_fSellVolume; // 申卖量1,2,3,4,5
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct YJ_Fenbi
    {
    public ushort m_wMarket; // 股票市场类型           同通视规范定义
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = STKLABEL_LEN)]
    public char[] m_szLabel; // 股票代码,以'\0'结尾
    public long m_lDate; // 分笔数据的日期 FORMAT: 20050808, 0表示当天或最近交易日的明细数据
    public float m_fLastClose; // 昨收
    public float m_fOpen; // 今开
    public ushort m_nCount; //m_Data的数据量分笔笔数(2字节smallint)
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 120)]
    public YJFenbi[] m_Data; //长度为m_nCount*sizeof(YJFenbi)字节
    }

    //////////////////////////////////////////////////////////////////////////////////
    // 文件类型数据包头
    // 注一:
    // m_wDataType == FILE_BASE_EX
    // m_dwAttrib = 股票证券市场,m_szFileName仅包含文件名
    // m_FileTime = 基本面资料文件创建日期
    // m_wDataType == FILE_NEWS_EX
    // m_dwAttrib = 消息来源,m_szFileName 包含目录的文件名,目录名为消息来源
    // m_dwSerialNo = 序列号
    // 如: "上交所消息\\0501Z012.TXT","新兰德\\XLD0001.TXT"
    // m_wDataType == FILE_HTML_EX
    // m_dwAttrib 保留, m_szFileName为URL
    // m_wDataType == FILE_SOFTWARE_EX
    // m_dwAttrib 分析软件类型, 用于初步判断
    // m_szFileName 分析软件 ID 特征字符串 + '\\' + 文件名
    // 如 "TongShi\\TS\\RECEIVE\\RECEIVE.EXE",
    // ID 特征字符串为 "TongShi", "TS\\RECEIVE\\RECEIVE.EXE" 为文件名
    // 特征字符串 和 文件名及其含义由分析软件商定义
    // 注二:
    // 数据文件循环播出,每个文件有唯一的序列号,以避免重复接收
    [StructLayout(LayoutKind.Explicit)]
    public struct RCV_FILE_HEADEx
    {
    [FieldOffset(0)]
    public uint m_dwAttrib; // 文件子类型
    [FieldOffset(4)]
    public uint m_dwLen; // 文件长度
    [FieldOffset(8)]
    public uint m_dwSerialNo; // 序列号,对股评
    [FieldOffset(8)]
    public uint m_FileTime; // 文件创建时间
    [FieldOffset(12)]
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)]
    public char[] m_szFileName; // 文件名 or URL
    }

    //综合排名
    [StructLayout(LayoutKind.Sequential)]
    public struct MULTISORT_ITEM_STRUCTEx
    {
    public byte m_type; // stock's type
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    public char[] m_code; // stock code
    public int m_data1;
    public int m_data2;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_MULTISORT_STRUCTEx
    {
    public uint m_class; // 1-涨幅 2-跌幅 4-5分钟涨幅 8-5分钟跌幅 16-委比前六 32-委比后六
    // 64-震幅 128-量比 256-总金额
    public uint m_tag1; // 0xf0 00
    public ushort m_tag2; // 0x06 00
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
    public MULTISORT_ITEM_STRUCTEx[] m_stocks;
    }



    //////////////////////////////////////////////////////////////////////////////////
    // 数据通知消息
    //查询方式通知消息
    // wParam = MsgPara_StkData 有股票数据
    // wParam = MsgPara_File 有文件数据文件
    //直接数据引用通知消息
    // wParam = RCV_WPARAM;
    // lParam 指向 RCV_DATA结构;
    // 返回 1 已经处理, 0 未处理或不能处理,目前该返回值被忽略

    // 注一:
    // 记录数表示行情数据和补充数据(包括 Header)的数据包数,对文件类型数据, = 1
    // 注二:
    // 若 m_bDISK = FALSE, m_pData 为数据缓冲区指针
    // ******** 数据共享,不能修改数据 **********
    // m_bDISK = TRUE, m_pData 为该文件的存盘文件名,一般情况只有
    // 升级软件等大文件用存盘方式
    //[StructLayout(LayoutKind.Explicit)]
    [StructLayout(LayoutKind.Sequential)]
    public struct RCV_DATA
    {
    //[FieldOffset(0)]
    public int m_wDataType; // 文件类型
    //[FieldOffset(4)]
    public int m_nPacketNum; // 记录数,参见注一
    //[FieldOffset(8)]
    public RCV_FILE_HEADEx m_File; // 文件接口
    //[FieldOffset(8)]
    //[MarshalAs(UnmanagedType.I4)]
    public int m_bDISK; // 文件是否已存盘的文件

    public IntPtr ptr;

    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.ByValArray)]
    //public RCV_REPORT_STRUCTEx[] m_pReport;
    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.ByValArray)]
    //public RCV_REPORT_STRUCTEx1[] m_pReport1;
    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.ByValArray)]
    //public RCV_REPORT_STRUCTEx2[] m_pReport2;
    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.ByValArray)]
    //public RCV_HISTORY_STRUCTEx[] m_pDay;
    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.ByValArray)]
    //public RCV_MINUTE_STRUCTEx[] m_pMinute;
    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.ByValArray)]
    //public RCV_POWER_STRUCTEx[] m_pPower;
    //[FieldOffset(292)]
    //[MarshalAs(UnmanagedType.AsAny)]
    //public object m_pData; // 参见注二
    }



    // 注册函数

    // 股票初始化
    // 入口参数:
    // hWnd 处理消息的窗口句柄
    // Msg 用户自定义消息
    // nWorkMode 接口工作方式, 应等于 RCV_WORK_SENDMSG
    // 返回参数:
    // 1 成功
    // -1 失败
    [DllImport("Stock.dll")]
    private static extern int Stock_Init(IntPtr hWnd, uint Msg, int nWorkMode);

    // 退出,停止发送消息
    // 入口参数:
    // hWnd 处理消息的窗口句柄,同 Stock_Init 的调用入口参数
    // 返回参数:
    // 1 成功
    // -1 失败
    [DllImport("Stock.dll")]
    private static extern int Stock_Quit(IntPtr hWnd);

    // 激活接收程序,进行设置
    // 入口参数:
    // bSetup TRUE 显示窗口,进行设置
    // FALSE 隐含窗口
    // 返回参数:
    // 1 成功
    // -1 失败
    [DllImport("Stock.dll")]
    private static extern int SetupReceiver(int bSetup);

    //////////////////////////////////////////////////////////////////////////////////
    // 行情接口

    // 取已接收到的股票总数
    [DllImport("Stock.dll")]
    private static extern int GetTotalNumber();

    // 由序号取股票数据(扩展)
    // 入口参数:
    // nNo 序号
    // pBuf 存放股票数据的缓冲区
    // 返回参数:
    // NoStockData 无股票数据
    // 注:
    // 该函数提供股票数据的主要数据;分析软件刚运行时,可以快速建立数据框架
    //[DllImport("Stock.dll")]
    //private static extern int GetStockByNoEx(int nNo, [MarshalAs(UnmanagedType.LPStruct)]RCV_REPORT_STRUCTEx pBuf);

    // 由股号取股票数据(扩展)
    // 入口参数:
    // pszStockCode股票代号
    // nMarket 证券市场
    // pBuf 存放股票数据的缓冲区
    // 返回参数:
    // NoStockData 无股票数据
    // 注:
    // 该函数提供股票数据的主要数据;分析软件刚运行时,可以快速建立数据框架
    //[DllImport("Stock.dll")]
    //private static extern int GetStockByCodeEx(char* pszStockCode, int nMarket, RCV_REPORT_STRUCTEx* pBuf);


    // 取得股票驱动信息
    // 入口参数:
    // nInfo 索引
    // pBuf 缓冲区
    // 出口参数:
    // nInfo == RI_IDSTRING, 返回特征字符串长度, pBuf 为特征字符串
    // 如: "TongShi_StockDrv_1.00"
    // nInfo == RI_IDCODE, 返回信息卡 ID 号, pBuf 为字符串形式的 ID 号
    // 如: 0x78001234 "78001234"
    // nInfo == RI_VERSION, 返回信息卡版本号, pBuf 为字符串版本
    // 如: 1.00 "1.00"
    // nInfo == RI_ERRRATE, 取信道误码,
    // nInfo == RI_STKNUM, 取上市股票总家数
    [DllImport("Stock.dll")]
    private static extern int GetStockDrvInfo(int nInfo, [MarshalAs(UnmanagedType.AsAny)] object pBuf);

    protected override void WndProc(ref Message m)
    {

    switch (m.Msg)
    {
    case My_Msg_StkData:
    RCV_DATA pHeader = (RCV_DATA)m.GetLParam(typeof(RCV_DATA));

    if (pHeader.ptr != IntPtr.Zero)
    {
    switch (m.WParam.ToInt32())
    {
    case RCV_REPORT: //接收分时行情
    }
    }
    default:
    base.WndProc(ref m);
    break;
    }
    }

    public StockAdapter()
    {
    InitializeComponent();
    Stock_Init(this.Handle, My_Msg_StkData, RCV_WORK_SENDMSG);
    }

    }
     
  2. 是否是 定义有问题呢?
    还是WndProc写得有问题?