谁能帮我看看,VC翻成DELPHI格式?对吗!!! (100分)

J

jerryT

Unregistered / Unconfirmed
GUEST, unregistred user!
以下内容为VC:
/****************************************************************************************
* 分析家证券投资分析系统行情接口规范V3.0
* (适用于单向数据传输方式)
****************************************************************************************/

****************************************************************************************/
* 驱动程序安装后,应该在系统注册库中注册以下信息,分析软件通过该注册信息启动动态库 *
* HKEY_LOCAL_MACHINE/SOFTWARE/StockDrv 下 *
* Driver = "驱动DLL全路径" *
****************************************************************************************/

#ifndef __STOCKDRV_H__
#define __STOCKDRV_H__
/////////////////////////////////////////////////////////////////////////////////
//增补说明
//2003年9月1日,增补上海、深圳市场5档买卖盘支持
// a.当用RCV_WORK_SENDMSG工作模式时,分析家V5.0.1后的版本才支持支持上海、深圳市场5档买卖盘
// b.与之前版本相比,新增了RCV_REPORT_STRUCTExV3结构用以代替RCV_REPORT_STRUCTExV2结构,驱动程序升级仅需要用前者替换后者即可
//2001年9月1日,增补深圳行情库SJS库的更改
// a.工作模式增加RCV_WORK_SENDMSG模式,建议驱动程序支持RCV_WORK_MEMSHARE和RCV_WORK_SENDMSG两种工作模式以支持各种版本的分析家
// b.RCV_WORK_SENDMSG工作模式与RCV_WORK_MEMSHARE的唯一区别在于使用RCV_REPORT_STRUCTExV2数据结构替代RCV_REPORT_STRUCTEx数据结构传输动态行情
// c.若GetStockDrvInfo(RI_V2SUPPORT)返回1,则分析家启用RCV_WORK_SENDMSG工作模式,否则启用RCV_WORK_MEMSHARE工作模式,分析家采用这种方式来兼容前后版本
// d.采用RCV_WORK_SENDMSG工作模式,分析家系统能够支持4位和6位深圳股票代码
// e.RCV_WORK_SENDMSG工作模式只在分析家V4.01.00后的版本才支持。
/////////////////////////////////////////////////////////////////////////////////
// 工作方式类型定义
#define RCV_WORK_DEMAND 0 // 查询接口,方式一
#define RCV_WORK_MEMSHARE 2 // 内存共享直接引用,方式二
#define RCV_WORK_SENDMSG 4 // 版本 2 建议使用的方式,对于六位代码的深圳市场必须使用这种模式
// 其他工作方式保留

/*
指数代号-名称
1A0001 上证综合指数 1A0002 上证A股指数 1A0003 上证B股指数
1B0001 上证工业指数 1B0002 上证商业指数 1B0004 上证地产指数
1B0005 上证公用事业 1B0006 上证综合 1B0007 上证30指数
2A01 深证成分指数 2A02 深证成分A 2A03 深证成分B
2B01 深证工业 2B02 深证商业 2B03 深证金融
2B04 深证地产 2B05 深证公共事业 2B06 深证综合
2B07 深证基金 2C01 深证指数 2C02 深证A股
2C03 深证B股
*/
/////////////////////////////////////////////////////////////////////////////////////////
// 以下是接口方式二
// 证券市场
#define SH_MARKET_EX 'HS' // 上海
#define SZ_MARKET_EX 'ZS' // 深圳
#define HK_MARKET_EX 'KH' // 香港
// 文件数据类型
// 结构数组形式的文件数据
#define FILE_HISTORY_EX 2 // 补日线数据
#define FILE_MINUTE_EX 4 // 补分钟线数据
#define FILE_POWER_EX 6 // 补充除权数据
#define FILE_BASE_EX 0x1000 // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
#define FILE_NEWS_EX 0x1002 // 新闻类,其类型由m_szFileName中子目录名来定
#define FILE_HTML_EX 0x1004 // HTML文件,m_szFileName为URL
#define FILE_SOFTWARE_EX 0x2000 // 升级软件
// 消息子类型
#define News_Sha_Ex 2 // 上证消息
#define News_Szn_Ex 4 // 深证消息
#define News_Fin_Ex 6 // 财经报道
#define News_TVSta_Ex 8 // 电视台通知
#define News_Unknown_Ex -1 // 未知提供者
//Definition For nInfo of Function GetStockDrvInfo(int nInfo,void * pBuf);
#define RI_IDSTRING 1 // 厂商名称,返回(LPCSTR)厂商名
#define RI_IDCODE 2 // 卡号
#define RI_VERSION 3 // 驱动程序版本
#define RI_V2SUPPORT 6 // 支持深圳SJS库结构
#define STKLABEL_LEN 10 // 股号数据长度,国内市场股号编码兼容钱龙
#define STKNAME_LEN 32 // 股名长度

//////////////////////////////////////////////////////////////////////////////////
//行情数据(版本1数据结构RCV_WORK_MEMSHARE)
typedef struct tagRCV_REPORT_STRUCTEx
{
WORD m_wMarket; // 股票市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码,以'/0'结尾
char m_szName[STKNAME_LEN]; // 股票名称,以'/0'结尾

float m_fLastClose; // 昨收
float m_fOpen; // 今开
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交额
float m_fBuyPrice[3]; // 申买价1,2,3
float m_fBuyVolume[3]; // 申买量1,2,3
float m_fSellPrice[3]; // 申卖价1,2,3
float m_fSellVolume[3]; // 申卖量1,2,3
} RCV_REPORT_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
//行情数据(版本2数据结构RCV_WORK_SENDMSG)
typedef struct tagRCV_REPORT_STRUCTExV2
{
WORD m_cbSize; // 结构大小
time_t m_time; // 成交时间
WORD m_wMarket; // 股票市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码,以'/0'结尾
char m_szName[STKNAME_LEN]; // 股票名称,以'/0'结尾

float m_fLastClose; // 昨收
float m_fOpen; // 今开
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交额
float m_fBuyPrice[3]; // 申买价1,2,3
float m_fBuyVolume[3]; // 申买量1,2,3
float m_fSellPrice[3]; // 申卖价1,2,3
float m_fSellVolume[3]; // 申卖量1,2,3
float m_fBuyPrice4; // 申买价4
float m_fBuyVolume4; // 申买量4
float m_fSellPrice4; // 申卖价4
float m_fSellVolume4; // 申卖量4
} RCV_REPORT_STRUCTExV2;
//////////////////////////////////////////////////////////////////////////////////
//行情数据(版本3数据结构RCV_WORK_SENDMSG,兼容RCV_REPORT_STRUCTExV2结构,使用m_cbSize区分不同结构)
//版本3支持5档买卖盘
typedef struct tagRCV_REPORT_STRUCTExV3
{
WORD m_cbSize; // 结构大小
time_t m_time; // 成交时间
WORD m_wMarket; // 股票市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码,以'/0'结尾
char m_szName[STKNAME_LEN]; // 股票名称,以'/0'结尾

float m_fLastClose; // 昨收
float m_fOpen; // 今开
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交额
float m_fBuyPrice[3]; // 申买价1,2,3
float m_fBuyVolume[3]; // 申买量1,2,3
float m_fSellPrice[3]; // 申卖价1,2,3
float m_fSellVolume[3]; // 申卖量1,2,3
float m_fBuyPrice4; // 申买价4
float m_fBuyVolume4; // 申买量4
float m_fSellPrice4; // 申卖价4
float m_fSellVolume4; // 申卖量4
float m_fBuyPrice5; // 申买价5
float m_fBuyVolume5; // 申买量5
float m_fSellPrice5; // 申卖价5
float m_fSellVolume5; // 申卖量5
} RCV_REPORT_STRUCTExV3;
//////////////////////////////////////////////////////////////////////////////////
//补充数据头
//数据头 m_dwHeadTag == EKE_HEAD_TAG
#define EKE_HEAD_TAG 0xffffffff
typedef struct tagRCV_EKE_HEADEx
{
DWORD m_dwHeadTag; // = EKE_HEAD_TAG
WORD m_wMarket; // 市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码
}RCV_EKE_HEADEx;
//补充日线数据
typedef union tagRCV_HISTORY_STRUCTEx
{
struct
{
time_t m_time; //UCT
float m_fOpen; //开盘
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盘
float m_fVolume; //量
float m_fAmount; //额
WORD m_wAdvance; //涨数,仅大盘有效
WORD m_wDecline; //跌数,仅大盘有效
};
RCV_EKE_HEADEx m_head;
}RCV_HISTORY_STRUCTEx;
//补充分时线数据
typedef union tagRCV_MINUTE_STRUCTEx
{
struct{
time_t m_time; // UCT
float m_fPrice;
float m_fVolume;
float m_fAmount;
};
RCV_EKE_HEADEx m_head;
}RCV_MINUTE_STRUCTEx;
//补充除权数据
typedef union tagRCV_POWER_STRUCTEx
{
struct
{
time_t m_time; // UCT
float m_fGive; // 每股送
float m_fPei; // 每股配
float m_fPeiPrice; // 配股价,仅当 m_fPei!=0.0f 时有效
float m_fProfit; // 每股红利
};
RCV_EKE_HEADEx m_head;
}RCV_POWER_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
// 文件类型数据包头
// 注一:
// m_wDataType == FILE_BASE_EX
// m_dwAttrib = 股票证券市场,m_szFileName仅包含文件名
// m_wDataType == FILE_NEWS_EX
// m_dwAttrib = 消息来源,m_szFileName 包含目录的文件名,目录名为消息来源
// 如: "上交所消息//0501Z012.TXT","新兰德//XLD0001.TXT"
// m_wDataType == FILE_HTML_EX
// m_dwAttrib 保留, m_szFileName为URL
// m_wDataType == FILE_SOFTWARE_EX
// m_dwAttrib 分析软件类型, 用于初步判断
// m_szFileName 分析软件 ID 特征字符串 + '//' + 文件名
// 如 "SuperStk//SuperStk.EXE",
// ID 特征字符串为 "SuperStk", "SuperStk.EXE" 为文件名
// 特征字符串 和 文件名及其含义由分析软件商定义
// 注二:
// 数据文件循环播出,每个文件有唯一的序列号,以避免重复接收
typedef struct tagRCV_FILE_HEADEx
{
DWORD m_dwAttrib; // 文件子类型
DWORD m_dwLen; // 文件长度
DWORD m_dwSerialNo; // 序列号
char m_szFileName[MAX_PATH]; // 文件名 or URL
} RCV_FILE_HEADEx;
//////////////////////////////////////////////////////////////////////////////////
// 数据通知消息
//直接数据引用通知消息
// wParam = RCV_WPARAM;
// lParam 指向 RCV_DATA结构;
// 返回 1 已经处理, 0 未处理或不能处理
#define RCV_REPORT 0x3f001234
#define RCV_FILEDATA 0x3f001235
// 注一:
// 记录数表示行情数据和补充数据(包括 Header)的数据包数,对文件类型数据, = 1
// 注二:
// 若 m_bDISK = FALSE, m_pData 为数据缓冲区指针
// ******** 数据共享,不能修改数据 **********
// m_bDISK = TRUE, m_pData 为该文件的存盘文件名,一般情况只有
// 升级软件等大文件用存盘方式
typedef struct tagRCV_DATA
{
int m_wDataType; // 文件类型
int m_nPacketNum; // 记录数,参见注一
RCV_FILE_HEADEx m_File; // 文件接口
BOOL m_bDISK; // 文件是否已存盘的文件
union
{
RCV_REPORT_STRUCTEx * m_pReport;
RCV_REPORT_STRUCTExV2* m_pReportV2;
RCV_REPORT_STRUCTExV3* m_pReportV3;
RCV_HISTORY_STRUCTEx * m_pDay;
RCV_MINUTE_STRUCTEx * m_pMinute;
RCV_POWER_STRUCTEx * m_pPower;
void * m_pData; // 参见注二
};
} RCV_DATA;
/* 消息处理程序 DEMO
LONG OnStkDataOK(UINT wParam,LONG lParam)
{
RCV_DATA* pHeader;
pHeader = (RCV_DATA *)lParam;
switch( wParam )
{
case RCV_REPORT: // 共享数据引用方式,股票行情
for(i=0;
i<pHeader->m_nPacketNum;
i++)
{
pHeader->m_pReport ...
// 数据处理
}
break;
case RCV_FILEDATA: // 共享数据引用方式,文件
switch(pHeader->m_wDataType)
{
case FILE_HISTORY_EX: // 补日线数据
break;
case FILE_MINUTE_EX: // 补分钟线数据
break;
case FILE_POWER_EX: // 补充除权数据
break;
case FILE_BASE_EX: // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
break;
case FILE_NEWS_EX: // 新闻类,其类型由m_szFileName中子目录名来定
break;
case FILE_HTML_EX: // HTML文件,m_szFileName为URL
break;
case FILE_SOFTWARE_EX: // 升级软件
break;
}
break;
default:
return 0; // unknown data
}
return 1;
}
*/

//////////////////////////////////////////////////////////////////////////////////
//APIs
#ifdef __cplusplus
extern "C"{
#endif
//////////////////////////////////////////////////////////////////////////////////
// 注册函数
// 股票初始化
// 入口参数:
// hWnd 处理消息的窗口句柄
// Msg 用户自定义消息
// nWorkMode 接口工作方式,参见工作方式类型定义
// 返回参数:
// 1 成功
// -1 失败
// 注:
// 注册后,驱动程序会向处理窗口发送消息;
若不注册,通过查询方式亦可取得数据
// 若股票接收没启动,则启动股票接收程序
int WINAPI Stock_Init(HWND hWnd,UINT Msg,int nWorkMode);
// 退出,停止发送消息
// 入口参数:
// hWnd 处理消息的窗口句柄,同 Stock_Init 的调用入口参数
// 返回参数:
// 1 成功
// -1 失败
int WINAPI Stock_Quit(HWND hWnd);
// 激活接收程序,进行设置
// 入口参数:
// bSetup TRUE 显示窗口,进行设置
// FALSE 隐含窗口
// 返回参数:
// 1 成功
// -1 失败
int WINAPI SetupReceiver(BOOL bSetup);
// 取得股票驱动信息
// 入口参数:
// 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_V2SUPPORT, 返回是否支持深圳SJS库结构, pBuf无效
DWORD WINAPI GetStockDrvInfo(int nInfo,void * pBuf);

void WINAPI ReInitStockInfo();
//重新取得股票数据
#ifdef __cplusplus
}
#endif

#endif // __STOCKDRV_H__
[red]以下内容为Dephi:[/red]
unit STKDRV;
interface
uses
Windows;
Wintypes;
WinProcs;

{+//***************************************************************************************
}
{-* 分析家证券投资分析系统行情接口规范V3.0 }
{-* (适用于单向数据传输方式) }
{=*************************************************************************************** }

{////////////////////////////////////////////////////////////////////////////////// }
{///增补说明 }
{///2003年9月1日,增补上海、深圳市场5档买卖盘支持 }
{/// a.当用RCV_WORK_SENDMSG工作模式时,分析家V5.0.1后的版本才支持支持上海、深圳市场5档买卖
盘 }
{/// b.与之前版本相比,新增了RCV_REPORT_STRUCTExV3结构用以代替RCV_REPORT_STRUCTExV2结构,驱
动程序升级仅需要用前者替换后者即可 }
{///2001年9月1日,增补深圳行情库SJS库的更改 }
{/// a.工作模式增加RCV_WORK_SENDMSG模式,建议驱动程序支持RCV_WORK_MEMSHARE和
RCV_WORK_SENDMSG两种工作模式以支持各种版本的分析家 }
{/// b.RCV_WORK_SENDMSG工作模式与RCV_WORK_MEMSHARE的唯一区别在于使用RCV_REPORT_STRUCTExV2数
据结构替代RCV_REPORT_STRUCTEx数据结构传输动态行情 }
{/// c.若GetStockDrvInfo(RI_V2SUPPORT)返回1,则分析家启用RCV_WORK_SENDMSG工作模式,否则启用
RCV_WORK_MEMSHARE工作模式,分析家采用这种方式来兼容前后版本 }
{/// d.采用RCV_WORK_SENDMSG工作模式,分析家系统能够支持4位和6位深圳股票代码 }
{/// e.RCV_WORK_SENDMSG工作模式只在分析家V4.01.00后的版本才支持。 }
{////////////////////////////////////////////////////////////////////////////////// }
{/// 工作方式类型定义 }
const
RCV_WORK_DEMAND = 0;
{// 查询接口,方式一}
const
RCV_WORK_MEMSHARE = 2;
{// 内存共享直接引用,方式二}
const
RCV_WORK_SENDMSG = 4;
{// 版本 2 建议使用的方式,对于六位代码的深圳市场必须使用这种模式}
{/// 其他工作方式保留 }

{+// }
{-指数代号-名称 }
{-1A0001 上证综合指数 1A0002 上证A股指数 1A0003 上证B股指数 }
{-1B0001 上证工业指数 1B0002 上证商业指数 1B0004 上证地产指数 }
{-1B0005 上证公用事业 1B0006 上证综合 1B0007 上证30指数 }
{-2A01 深证成分指数 2A02 深证成分A 2A03 深证成分B }
{-2B01 深证工业 2B02 深证商业 2B03 深证金融 }
{-2B04 深证地产 2B05 深证公共事业 2B06 深证综合 }
{-2B07 深证基金 2C01 深证指数 2C02 深证A股 }
{-2C03 深证B股 }
{= }
{//////////////////////////////////////////////////////////////////////////////////////////
}
{/// 以下是接口方式二 }
{/// 证券市场 }
const
SH_MARKET_EX = 'HS';
{// 上海}
const
SZ_MARKET_EX = 'ZS';
{// 深圳}
const
HK_MARKET_EX = 'KH';
{// 香港}
{/// 文件数据类型 }
{/// 结构数组形式的文件数据 }
const
FILE_HISTORY_EX = 2;
{// 补日线数据}
const
FILE_MINUTE_EX = 4;
{// 补分钟线数据}
const
FILE_POWER_EX = 6;
{// 补充除权数据}
const
FILE_BASE_EX = $1000;
{// 钱龙兼容基本资料文件,m_szFileName仅包含文件名}
const
FILE_NEWS_EX = $1002;
{// 新闻类,其类型由m_szFileName中子目录名来定}
const
FILE_HTML_EX = $1004;
{// HTML文件,m_szFileName为URL}
const
FILE_SOFTWARE_EX = $2000;
{// 升级软件}
{/// 消息子类型 }
const
News_Sha_Ex = 2;
{// 上证消息}
const
News_Szn_Ex = 4;
{// 深证消息}
const
News_Fin_Ex = 6;
{// 财经报道}
const
News_TVSta_Ex = 8;
{// 电视台通知}
const
News_Unknown_Ex = -1;
{// 未知提供者}
{///Definition For nInfo of Function GetStockDrvInfo(int nInfo,void* pBuf);
}
const
RI_IDSTRING = 1;
{// 厂商名称,返回(LPCSTR)厂商名}
const
RI_IDCODE = 2;
{// 卡号}
const
RI_VERSION = 3;
{// 驱动程序版本}
const
RI_V2SUPPORT = 6;
{// 支持深圳SJS库结构}
const
STKLABEL_LEN = 10;
{// 股号数据长度,国内市场股号编码兼容钱龙}
const
STKNAME_LEN = 32;
{// 股名长度}

{/////////////////////////////////////////////////////////////////////////////////// }
{///行情数据(版本1数据结构RCV_WORK_MEMSHARE) }
type
tagRCV_REPORT_STRUCTEx = record
m_wMarket: Word;
m_szLabel: Array[0..STKLABEL_LEN-1] of Char;
m_szName: Array[0..STKNAME_LEN-1] of Char;
m_fLastClose: Single;
m_fOpen: Single;
m_fHigh: Single;
m_fLow: Single;
m_fNewPrice: Single;
m_fVolume: Single;
m_fAmount: Single;
m_fBuyPrice: Array[0..3-1] of Single;
m_fBuyVolume: Array[0..3-1] of Single;
m_fSellPrice: Array[0..3-1] of Single;
m_fSellVolume: Array[0..3-1] of Single;
end {tagRCV_REPORT_STRUCTEx};
{/////////////////////////////////////////////////////////////////////////////////// }
{///行情数据(版本2数据结构RCV_WORK_SENDMSG) }
type
tagRCV_REPORT_STRUCTExV2 = record
m_cbSize: Word;
m_time: TIME_T;
m_wMarket: Word;
m_szLabel: Array[0..STKLABEL_LEN-1] of Char;
m_szName: Array[0..STKNAME_LEN-1] of Char;
m_fLastClose: Single;
m_fOpen: Single;
m_fHigh: Single;
m_fLow: Single;
m_fNewPrice: Single;
m_fVolume: Single;
m_fAmount: Single;
m_fBuyPrice: Array[0..3-1] of Single;
m_fBuyVolume: Array[0..3-1] of Single;
m_fSellPrice: Array[0..3-1] of Single;
m_fSellVolume: Array[0..3-1] of Single;
m_fBuyPrice4: Single;
m_fBuyVolume4: Single;
m_fSellPrice4: Single;
m_fSellVolume4: Single;
end {tagRCV_REPORT_STRUCTExV2};
{/////////////////////////////////////////////////////////////////////////////////// }
{///行情数据(版本3数据结构RCV_WORK_SENDMSG,兼容RCV_REPORT_STRUCTExV2结构,使用m_cbSize区分
不同结构) }
{///版本3支持5档买卖盘 }
type
tagRCV_REPORT_STRUCTExV3 = record
m_cbSize: Word;
m_time: TIME_T;
m_wMarket: Word;
m_szLabel: Array[0..STKLABEL_LEN-1] of Char;
m_szName: Array[0..STKNAME_LEN-1] of Char;
m_fLastClose: Single;
m_fOpen: Single;
m_fHigh: Single;
m_fLow: Single;
m_fNewPrice: Single;
m_fVolume: Single;
m_fAmount: Single;
m_fBuyPrice: Array[0..3-1] of Single;
m_fBuyVolume: Array[0..3-1] of Single;
m_fSellPrice: Array[0..3-1] of Single;
m_fSellVolume: Array[0..3-1] of Single;
m_fBuyPrice4: Single;
m_fBuyVolume4: Single;
m_fSellPrice4: Single;
m_fSellVolume4: Single;
m_fBuyPrice5: Single;
m_fBuyVolume5: Single;
m_fSellPrice5: Single;
m_fSellVolume5: Single;
end {tagRCV_REPORT_STRUCTExV3};
{/////////////////////////////////////////////////////////////////////////////////// }
{///补充数据头 }
{///数据头 m_dwHeadTag == EKE_HEAD_TAG }
const
EKE_HEAD_TAG = $ffffffff;
type
tagRCV_EKE_HEADEx = record
m_dwHeadTag: LongInt;
m_wMarket: Word;
m_szLabel: Array[0..STKLABEL_LEN-1] of Char;
end {tagRCV_EKE_HEADEx};
{///补充日线数据 }
type
tagRCV_HISTORY_STRUCTEx = record
case Word of
1: ( 2: (m_time: TIME_T;);
3: (m_fOpen: Single;);
4: (m_fHigh: Single;);
5: (m_fLow: Single;);
6: (m_fClose: Single;);
7: (m_fVolume: Single;);
8: (m_fAmount: Single;);
9: (m_wAdvance: Word;);
10: (m_wDecline: Word;);
end {tagRCV_HISTORY_STRUCTEx};
{///补充分时线数据 }
type
tagRCV_MINUTE_STRUCTEx = record
case Word of
1: (struct: Integer;);
2: (m_time: TIME_T;);
3: (m_fPrice: Single;);
4: (m_fVolume: Single;);
5: (m_fAmount: Single;);
end {tagRCV_MINUTE_STRUCTEx};
{///补充除权数据 }
type
tagRCV_POWER_STRUCTEx = record
case Word of
1: ( 2: (m_time: TIME_T;);
3: (m_fGive: Single;);
4: (m_fPei: Single;);
5: (m_fPeiPrice: Single;);
6: (m_fProfit: Single;);
end {tagRCV_POWER_STRUCTEx};
{/////////////////////////////////////////////////////////////////////////////////// }
{/// 文件类型数据包头 }
{/// 注一: }
{/// m_wDataType == FILE_BASE_EX }
{/// m_dwAttrib = 股票证券市场,m_szFileName仅包含文件名 }
{/// m_wDataType == FILE_NEWS_EX }
{/// m_dwAttrib = 消息来源,m_szFileName 包含目录的文件名,目录名为消息来源 }
{/// 如: "上交所消息//0501Z012.TXT","新兰德//XLD0001.TXT" }
{/// m_wDataType == FILE_HTML_EX }
{/// m_dwAttrib 保留, m_szFileName为URL }
{/// m_wDataType == FILE_SOFTWARE_EX }
{/// m_dwAttrib 分析软件类型, 用于初步判断 }
{/// m_szFileName 分析软件 ID 特征字符串 + '//' + 文件名 }
{/// 如 "SuperStk//SuperStk.EXE", }
{/// ID 特征字符串为 "SuperStk", "SuperStk.EXE" 为文件名 }
{/// 特征字符串 和 文件名及其含义由分析软件商定义 }
{/// 注二: }
{/// 数据文件循环播出,每个文件有唯一的序列号,以避免重复接收 }
type
tagRCV_FILE_HEADEx = record
m_dwAttrib: LongInt;
m_dwLen: LongInt;
m_dwSerialNo: LongInt;
m_szFileName: Array[0..MAX_PATH-1] of Char;
end {tagRCV_FILE_HEADEx};
{/////////////////////////////////////////////////////////////////////////////////// }
{/// 数据通知消息 }
{///直接数据引用通知消息 }
{/// wParam = RCV_WPARAM;
}
{/// lParam 指向 RCV_DATA结构;
}
{/// 返回 1 已经处理, 0 未处理或不能处理 }
const
RCV_REPORT = $3f001234;
const
RCV_FILEDATA = $3f001235;
{/// 注一: }
{/// 记录数表示行情数据和补充数据(包括 Header)的数据包数,对文件类型数据, = 1 }
{/// 注二: }
{/// 若 m_bDISK = FALSE, m_pData 为数据缓冲区指针 }
{///******** 数据共享,不能修改数据********** }
{/// m_bDISK = TRUE, m_pData 为该文件的存盘文件名,一般情况只有 }
{/// 升级软件等大文件用存盘方式 }
type
tagRCV_DATA = record
m_wDataType: Integer;
m_nPacketNum: Integer;
m_File: RCV_FILE_HEADEX;
m_bDISK: Bool;
m_pReport: PRCV_REPORT_STRUCTEX;
m_pReportV2: PRCV_REPORT_STRUCTEXV2;
m_pReportV3: PRCV_REPORT_STRUCTEXV3;
m_pDay: PRCV_HISTORY_STRUCTEX;
m_pMinute: PRCV_MINUTE_STRUCTEX;
m_pPower: PRCV_POWER_STRUCTEX;
m_pData: Pointer;
end {tagRCV_DATA};
{+// 消息处理程序 DEMO }
{-LONG OnStkDataOK(UINT wParam,LONG lParam) }
{-{ }
{-RCV_DATA* pHeader;
}
{-pHeader = (RCV_DATA* )lParam;
}
{-switch( wParam ) }
{-{ }
{-case RCV_REPORT: }
{-for(i=0;
i<pHeader->m_nPacketNum;
i++) }
{-{ }
{-pHeader->m_pReport ... }
{/// 数据处理 }
{-} }
{-break;
}
{-case RCV_FILEDATA: }
{-switch(pHeader->m_wDataType) }
{-{ }
{-case FILE_HISTORY_EX: }
{-break;
}
{-case FILE_MINUTE_EX: }
{-break;
}
{-case FILE_POWER_EX: }
{-break;
}
{-case FILE_BASE_EX: }
{-break;
}
{-case FILE_NEWS_EX: }
{-break;
}
{-case FILE_HTML_EX: }
{-break;
}
{-case FILE_SOFTWARE_EX: }
{-break;
}
{-} }
{-break;
}
{-default: }
{-return 0;
}
{-} }
{-return 1;
}
{-} }
{= }

{/////////////////////////////////////////////////////////////////////////////////// }
{///APIs }
{$IFDEF __cplusplus}
{$ENDIF}
{/////////////////////////////////////////////////////////////////////////////////// }
{/// 注册函数 }
{/// 股票初始化 }
{/// 入口参数: }
{/// hWnd 处理消息的窗口句柄 }
{/// Msg 用户自定义消息 }
{/// nWorkMode 接口工作方式,参见工作方式类型定义 }
{/// 返回参数: }
{/// 1 成功 }
{/// -1 失败 }
{/// 注: }
{/// 注册后,驱动程序会向处理窗口发送消息;
若不注册,通过查询方式亦可取得数据 }
{/// 若股票接收没启动,则启动股票接收程序 }
var
Stock_Init: function(hWnd: HWND;
Msg: Word;
nWorkMode: Integer): Integer {$IFDEF WIN32} stdcall {$ENDIF};

{/// 退出,停止发送消息 }
{/// 入口参数: }
{/// hWnd 处理消息的窗口句柄,同 Stock_Init 的调用入口参数 }
{/// 返回参数: }
{/// 1 成功 }
{/// -1 失败 }
var
Stock_Quit: function(hWnd: HWND): Integer {$IFDEF WIN32} stdcall {$ENDIF};

{/// 激活接收程序,进行设置 }
{/// 入口参数: }
{/// bSetup TRUE 显示窗口,进行设置 }
{/// FALSE 隐含窗口 }
{/// 返回参数: }
{/// 1 成功 }
{/// -1 失败 }
var
SetupReceiver: function(bSetup: Bool): Integer {$IFDEF WIN32} stdcall {$ENDIF};

{/// 取得股票驱动信息 }
{/// 入口参数: }
{/// 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_V2SUPPORT, 返回是否支持深圳SJS库结构, pBuf无效 }
var
GetStockDrvInfo: function(nInfo: Integer;
pBuf: Pointer): LongInt {$IFDEF WIN32} stdcall {$ENDIF};

var
ReInitStockInfo: procedure {$IFDEF WIN32} stdcall {$ENDIF};

{///重新取得股票数据 }
{$IFDEF __cplusplus}
{$ENDIF}

{$ENDIF // __STOCKDRV_H__}
var
DLLLoaded: Boolean { is DLL (dynamically) loaded already? }
{$IFDEF WIN32} = False;
{$ENDIF}
implementation
var
SaveExit: pointer;
DLLHandle: THandle;
{$IFNDEF MSDOS}
ErrorMode: Integer;
{$ENDIF}
procedure NewExit;
far;
begin
ExitProc := SaveExit;
FreeLibrary(DLLHandle)
end {NewExit};
procedure LoadDLL;
begin
if DLLLoaded then
Exit;
{$IFNDEF MSDOS}
ErrorMode := SetErrorMode($8000{SEM_NoOpenFileErrorBox});
{$ENDIF}
DLLHandle := LoadLibrary('STKDRV.DLL');
if DLLHandle >= 32 then
begin
DLLLoaded := True;
SaveExit := ExitProc;
ExitProc := @NewExit;
@Stock_Init := GetProcAddress(DLLHandle,'Stock_Init');
{$IFDEF WIN32}
Assert(@Stock_Init <> nil);
{$ENDIF}
@Stock_Quit := GetProcAddress(DLLHandle,'Stock_Quit');
{$IFDEF WIN32}
Assert(@Stock_Quit <> nil);
{$ENDIF}
@SetupReceiver := GetProcAddress(DLLHandle,'SetupReceiver');
{$IFDEF WIN32}
Assert(@SetupReceiver <> nil);
{$ENDIF}
@GetStockDrvInfo := GetProcAddress(DLLHandle,'GetStockDrvInfo');
{$IFDEF WIN32}
Assert(@GetStockDrvInfo <> nil);
{$ENDIF}
@ReInitStockInfo := GetProcAddress(DLLHandle,'ReInitStockInfo');
{$IFDEF WIN32}
Assert(@ReInitStockInfo <> nil);
{$ENDIF}
end
else
begin
DLLLoaded := False;
{ Error: STKDRV.DLL could not be loaded !! }
end;
{$IFNDEF MSDOS}
SetErrorMode(ErrorMode)
{$ENDIF}
end {LoadDLL};
begin
LoadDLL;
end.
 
非常简单的语名嘛,用C2PAS工具就可以。
 
顶部