如何将DWORD值转换为空值

How to convert an DWORD value to an void* one?

本文关键字:转换 空值 DWORD      更新时间:2023-10-16

给定这些typedef s和以下值:

typedef void  GTVOID;
typedef GTVOID *PARAM_VALUE;
typedef unsigned long UDGT32 
typedef UDGT32 PARAM_CONST;
typedef signed long DGT32;
typedef DGT32 RESULT_FUNC;
DWORD value = 1; // given from a define

我如何转换它以满足C++中设备SDK功能的需求?

RESULT_FUN RSetParam( PARAM_CONST DeviceParameter, PARAM_VALUE value);

样本中的C参考代码为:

RSetParam( R_SOME_PARAM_CONST, (PARAM_VALUE)value );

我在下面试过了,但很奇怪。它编译得还可以,整天都在工作令人毛骨悚然的运气,开始抛出访问违规的蓝色:

RSetParam(R_SOME_PARAM_CONST, reinterpret_cast<void*> (value));

我做错了什么?

您已尝试将值1重新解释为地址。根据函数RSetParam对此地址(值)所做的操作,程序可能会分段故障。尤其是当它试图写入此地址时。

我认为,函数RSetParam等待一个变量的地址作为第二个参数。变量的类型可能取决于其他因素,也就是为什么地址必须作为void *传递。

因此,如果您想将数字1作为DWORD传递,您必须首先在堆栈上分配一个变量,然后传递其地址:

DWORD tmp = 1; // given from define
RSetParam( R_SOME_PARAM_CONST, (PARAM_VALUE) &tmp ); // note the '&' !