And*_*ick 4 c++ 32bit-64bit visual-c++
我刚刚被赋予了将遗留应用程序从32位更新到64位的任务.在查看任务的范围时,我在包含外部(例如平台)标头之前立即发现了以下定义:
#define POINTER_32
Run Code Online (Sandbox Code Playgroud)
我找不到使用这个定义或它有什么效果的东西,但它看起来像是与我的任务直接相关的东西!
它是为了什么?有什么用?立即将其移除是否安全(我认为从长远来看有必要将其移除)?
这是使用MS VC++ 2008,很快将是2010年.
这是一个宏,通常在Windows SDK头文件BaseTsd.h头文件中声明.在32位模式下编译时,它是按照您显示的那样定义的.在64位模式下编译时,定义为
#define POINTER_32 __ptr32
Run Code Online (Sandbox Code Playgroud)
这是一个MSVC编译器扩展,用于在64位代码模型中声明32位指针.对于32位代码,还有一个64位的味道:
#define POINTER_64 __ptr64
Run Code Online (Sandbox Code Playgroud)
如果您编写64位程序并且需要与另一个进程中的32位代码使用的结构互操作,则可以使用它.例如:
typedef struct _SCSI_PASS_THROUGH_DIRECT32 {
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
VOID * POINTER_32 DataBuffer; // <== here
ULONG SenseInfoOffset;
UCHAR Cdb[16];
}SCSI_PASS_THROUGH_DIRECT32, *PSCSI_PASS_THROUGH_DIRECT32;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |