鉴于这些typedef
和以下值:
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));
我做错了什么?
答案 0 :(得分:0)
您已尝试将值1
重新解释为地址。根据函数RSetParam
对此地址(值)执行的操作,程序可能会出错。特别是,如果它试图写入此地址。
我认为,函数RSetParam
等待变量的地址作为第二个参数。变量的类型可能取决于其他内容,也就是说,必须将地址作为void *
传递的原因。
因此,如果你想将数字1作为DWORD传递,你必须首先在堆栈上分配一个变量然后传递它的地址:
DWORD tmp = 1; // given from define
RSetParam( R_SOME_PARAM_CONST, (PARAM_VALUE) &tmp ); // note the '&' !