0

给定这些typedefs 和下面的值:

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));

我做错了什么?

4

1 回答 1

0

您已尝试将该值重新解释1为地址。根据函数RSetParam对这个地址(值)所做的事情,程序可能会出现段错误。特别是,如果它试图写入这个地址。

我认为,该函数RSetParam等待变量的地址作为第二个参数。变量的类型可能取决于其他东西,即为什么必须将地址传递为void *.

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

DWORD tmp = 1; // given from define
RSetParam( R_SOME_PARAM_CONST, (PARAM_VALUE) &tmp ); // note the '&' !
于 2015-11-28T00:13:21.307 回答