首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 结构中的size问题? [已结帖,结帖人:jiazhh_love]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiazhh_love
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-19 10:18:23 楼主
    最近发现,在Windows中的很多结构如: WNDCLASSES中总能见到一个size的变量.一本书上说是"对于要被作为指针来传递的数据结构,一般都要此项数据"...
    不知道该怎么理解? 个人感觉直接用sizeof()就行了嘛...
    菜鸟..求达人指点..
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzr4304061988012
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:23:221楼 得分:0
    在16位和32位中Windows中的很多结构的大小不一样,所以一般要有一个size的变量,这是为了支持未来发展的需要.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • steedhorse
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      3

      4

    发表于:2008-08-19 10:24:012楼 得分:0
    这是C语言中常用来实现多态对象的一种旁门左道。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wienee
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:25:563楼 得分:0
    引用 2 楼 steedhorse 的回复:
    这是C语言中常用来实现多态对象的一种旁门左道。

    能给个例子吗,我也想学习一下。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiazhh_love
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 10:42:104楼 得分:0
    嗯.2楼能再说详细点吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mymtom
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-08-19 10:57:335楼 得分:20
    兼容考虑,比如EnumDisplaySettingsA函数用的结构
    C/C++ code
    typedef struct _devicemodeA { BYTE dmDeviceName[CCHDEVICENAME]; WORD dmSpecVersion; WORD dmDriverVersion; WORD dmSize; WORD dmDriverExtra; DWORD dmFields; union { struct { short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; }; POINTL dmPosition; }; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; BYTE dmFormName[CCHFORMNAME]; WORD dmLogPixels; DWORD dmBitsPerPel; DWORD dmPelsWidth; DWORD dmPelsHeight; DWORD dmDisplayFlags; DWORD dmDisplayFrequency; #if(WINVER >= 0x0400) DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; DWORD dmReserved1; DWORD dmReserved2; #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400) DWORD dmPanningWidth; DWORD dmPanningHeight; #endif #endif /* WINVER >= 0x0400 */ } DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA;

    在Windows 95/Windows NT4以前的版本中
    dmDisplayFrequency是最后一个成员。
    旧版本的程序调用了EnumDisplaySettings,不用重新编译,也能在Windows XP下正确运行运行。
    因为有dmSize成员,系统用类似memcpy(pDevMode, pData, pDevMode->dmSize)就能正确地填充DEVMODEA结构
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 11:07:436楼 得分:0
    学习了~
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved