最近在看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;?

解决方案 »

  1.   

    转化我就不帮你写了。就回答一下你底下的几个问题吧。
    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是可以的,不过这就成了一个动态的结构体,你需要在用之前初始化一下
      

  2.   


    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;
      

  3.   

    第三个1楼已经回答,因为定义的是动态数组,故需要用Setlength分配内存
      

  4.   

    看来干啥的都有。我是delphi在向c转型,楼主是反着来,都要努力哦。
      

  5.   


    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字节
      

  6.   

    http://hi.baidu.com/tweigh/blog/item/fbd0976296366dd8e7113a7f.html
      

  7.   

    多谢各位大大。我原来就是学Delphi的,只不过技术不咋的,所以才有这许多问题。不存在Delphi向c++转型或者C++向Delphi转型的问题。对于第三点,可能我写的不是很清楚。
    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;