我刚刚接到了将旧应用程序从 32 位更新到 64 位的任务。在查看任务的范围时,我在包含外部(例如平台) header 之前立即发现了以下定义:
#define POINTER_32
我找不到什么使用了这个定义或它有什么影响,但它看起来与我的任务直接相关!
它是做什么用的?它有什么用?立即删除它是否安全(我认为从长远来看有必要将其删除)?
这是使用 MS VC++ 2008,很快就是 2010。
最佳答案
这是一个通常在 Windows SDK 头文件 BaseTsd.h 头文件中声明的宏。在 32 位模式下编译时,它的定义如您所示。在 64 位模式下编译时,它被定义为
#define POINTER_32 __ptr32
这是一个 MSVC 编译器扩展,用于在 64 位代码模型中声明 32 位指针。 32 位代码也有 64 位风格:
#define POINTER_64 __ptr64
如果您编写 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;
关于c++ - POINTER_32 - 它是什么,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3447812/