我在转换 C++的结构体:#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA
{
DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
};
本来是用的 packed record ,结果发现结构体长度不对。于是,我手算了一下:一共占位 1049 (4+257+129+129+257+257+16) ,我的 "packed record" 也是 1049 ,应该对啊 ,感到奇怪。
于是,在 C++里 求了一下长度,是1052... 和 Delphi中 不用 "packed" 时的长度一样 ,VC6的编译器 和 Delphi6 一样做了对齐??那我在 转结构体 的时候,如何知道什么时候应该使用 "packed" ??? 求解~!!!
RASDIALPARAMSA
{
DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
};
本来是用的 packed record ,结果发现结构体长度不对。于是,我手算了一下:一共占位 1049 (4+257+129+129+257+257+16) ,我的 "packed record" 也是 1049 ,应该对啊 ,感到奇怪。
于是,在 C++里 求了一下长度,是1052... 和 Delphi中 不用 "packed" 时的长度一样 ,VC6的编译器 和 Delphi6 一样做了对齐??那我在 转结构体 的时候,如何知道什么时候应该使用 "packed" ??? 求解~!!!
解决方案 »
- 请教TStringList的addObject读取数据问题,报错!不知为何
- edit组件怎么让光标在右边呀?
- Pagecontrol的页面引用问题?
- 怎么把一个字符串转换为Int64类型?
- 单元格着色
- 如何在DELPHI中调用POWERPOINT
- 怎样让richedit 控件支持滚轮鼠标操作?
- ★★★★★《Delphi淡手辑略之数据库篇》★★★★★:'菜单'解构成'树'
- window中在那些地方加入配置,可使系统在启动时执行一个文件?
- 如何解决MDICHILDform的创建问题?
- WebBrowser1 播放ppt ppt自动播放下一页,该怎么弄。。大侠大侠帮帮忙~~
- 高手指导:delphi编译错误
相当于c++里面使用了
#pragma pack(1)
...//结构体定义
#pragma pop()
#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA
{
DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
};
当成
#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA
{
DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
CHAR szReserved[ 3 ];
};
这样子,不管你使用的是四字节对齐,还是单字节对齐都没有差异。
为什么#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA
{
DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
};
是 1052 ,而 :#define RASDIALPARAMSA struct tagRASDIALPARAMSA
RASDIALPARAMSA
{
// DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
};是 1045 ??? 多了一个 DWORD ,为什么就要多 3位??
char buff[256 + 1 + 128 +1 +128 +1 +256 +1 +256 +1 +15 +1];
这样子的定义没有任何差别。
MyRec2=Record
var1:integer;
var2:array[0..6]of char;
end;
就是 12,而 MyRec2=Record
// var1:integer;
var2:array[0..6]of char;
end;
就是 7.为什么 多了一个 integer 成员之后 ,结构体就需要对齐??
RASDIALPARAMSA
{
DWORD dwSize;
CHAR szEntryName[ 256 + 1 ];
CHAR szPhoneNumber[ 128 + 1 ];
CHAR szCallbackNumber[ 128 + 1 ];
CHAR szUserName[ 256 + 1 ];
CHAR szPassword[ 256 + 1 ];
CHAR szDomain[ 15 + 1 ];
};
是 : char buff[4 + 256 + 1 + 128 +1 +128 +1 +256 +1 +256 +1 +15 +1];