最近在看c++写的股票数据接收程序,想把它转换成Delphi,但下面的代码不知该怎么转换,请高手指点:
struct SC_Download { // 数据下载接口
SCHead m_Head; // m_head中仅m_nType有效
StockID m_sID;
long m_lCount; // // m_KLine,m_power,m_Trace,m_Title
union {
RCV_HISTORY_STRUCTEx m_KLine[1]; // k线、五分钟数据下载
RCV_POWER_STRUCTEx m_power[1]; // 除权数据下载
RCV_PANKOU_STRUCTEx m_Trace[1]; // 明细数据下载
struct { // F10、交易所公告、新闻、综合资讯
char m_cClass; // 类别
IMTitleEx m_Title[1];
char m_cData[1];
};
};
};
其中RCV_HISTORY_STRUCTEx、RCV_POWER_STRUCTEx、RCV_PANKOU_STRUCTEx、IMTitleEx是Struct结构
这里有几点疑惑:
1、一般c++中的struct,在delphi中可以写成record,不过struct中的struct该怎么写呢?
2、struct中的union在delphi中又是怎么实现的?
3、RCV_HISTORY_STRUCTEx m_KLine[1] 是不是可以写成 m_KLine:array of RCV_HISTORY_STRUCTEx;?
struct SC_Download { // 数据下载接口
SCHead m_Head; // m_head中仅m_nType有效
StockID m_sID;
long m_lCount; // // m_KLine,m_power,m_Trace,m_Title
union {
RCV_HISTORY_STRUCTEx m_KLine[1]; // k线、五分钟数据下载
RCV_POWER_STRUCTEx m_power[1]; // 除权数据下载
RCV_PANKOU_STRUCTEx m_Trace[1]; // 明细数据下载
struct { // F10、交易所公告、新闻、综合资讯
char m_cClass; // 类别
IMTitleEx m_Title[1];
char m_cData[1];
};
};
};
其中RCV_HISTORY_STRUCTEx、RCV_POWER_STRUCTEx、RCV_PANKOU_STRUCTEx、IMTitleEx是Struct结构
这里有几点疑惑:
1、一般c++中的struct,在delphi中可以写成record,不过struct中的struct该怎么写呢?
2、struct中的union在delphi中又是怎么实现的?
3、RCV_HISTORY_STRUCTEx m_KLine[1] 是不是可以写成 m_KLine:array of RCV_HISTORY_STRUCTEx;?
1。C++下面的struct中的struct也就是一个结构体再套一个结构体。那你在delphi里面可以在结构体里定义一个变量,它的类型就是另一个结构体。
2。C++里面的union就是枚举啦,在delphi里可以用底下的方式实现type GJS = (
I = 0,//你不定义值的话就默认从0开始
J = 1,
...
);3。RCV_HISTORY_STRUCTEx m_KLine[1] 是不是可以写成 m_KLine:array of RCV_HISTORY_STRUCTEx;?
你写成array of RCV_HISTORY_STRUCTEx是可以的,不过这就成了一个动态的结构体,你需要在用之前初始化一下
1.
结构体1:
Type
TTest1=record
//成员
end;
PTest1=^TTest1;
end;
结构体2:
Type
TTest2=record
FTest1:PTest1;
end;
end;
2.
type
TMyRec=record
case Integer of
0:
(x,y,z:Integer);
1:
(ar:array[0..2] of Integer);
end;
1、一般c++中的struct,在delphi中可以写成record,不过struct中的struct该怎么写呢?
2、struct中的union在delphi中又是怎么实现的?
3、RCV_HISTORY_STRUCTEx m_KLine[1] 是不是可以写成 m_KLine:array of RCV_HISTORY_STRUCTEx;?1. record中再嵌套一个变量record。按照C标准,编译不需要支持匿名struct,但现在的主流一般都扩展支持了
2. union在delphi中用case实现
3. 如果是要和c/cpp中的结构一致的话,不可以,动态数组和静态数组完全不同,前者在record中只占4字节
RCV_HISTORY_STRUCTEx m_KLine[1] 是不是可以写成 m_KLine:array of RCV_HISTORY_STRUCTEx;?我的意思是,[1]在c++中,是长度,对于struct是不是也是指长度?还是说是数组的长度?
比如,我下面这句是不是更符合原句呢?
m_KLine:array[0..0] of RCV_HISTORY_STRUCTEx;