首页 > windows编程:结构扩充后如何保持与之前的结构兼容?

windows编程:结构扩充后如何保持与之前的结构兼容?

windows程序设计 中有这段话:

typedef structure tagSCROLLINFO
{
UINT cbSize; //设为sizeof(SCROLLINFO)
UINT fMask;
...
...
}SCROLLINFO;

一些结构也类似地将第一个字段定义为结构的大小.这样,以后的windows版本可以扩充结构而同时保持与以前的应用程序兼容.

这段话我是看懂了,但是到底怎么使结构扩充后保持兼容我不知道,能否给个具体的例子?


“以后的windows版本可以扩充结构而同时保持与以前的应用程序兼容” -- 我的理解是这样:
假设第一个版本是这样子的:(瞎猜的)

//version 1:
typedef structure tagSCROLLINFO
{
    UINT cbSize; //设为sizeof(SCROLLINFO) = 24
    UINT fMask;
    int  nMin; 
    int  nMax; 
    UINT nPage; 
    int  nPos; 
}SCROLLINFO;

第二个版本为了处理拖动,增加了一个nTrackPos:

//version 2:
typedef structure tagSCROLLINFO
{
    UINT cbSize; //设为sizeof(SCROLLINFO) = 28
    UINT fMask;
    int  nMin; 
    int  nMax; 
    UINT nPage; 
    int  nPos; 
    int  nTrackPos; 
}SCROLLINFO;

注意:新增加的nTrackPos是加在最后的。
注意:新增加的nTrackPos是加在最后的。
注意:新增加的nTrackPos是加在最后的。
(重要的事情要说三遍)
兼容:传给版本1的应用程序一个版本2的SCROLLINFO时,版本1的应用程序中,虽然是看不到nTrackPos(版本1没有定义),但是由于前面的fMask等的位置没有变,版本1的应用程序也能正常跑起来。

【热门文章】
【热门文章】