dword与dword_ptr类型的区别及64位系统下调用系统函数直接崩溃的问题

在进行win64编译环境下,如果dword类型与dword_ptr类型混用,很容易造成越界崩溃的问题出现。Dword_PTR类型的定义,这个类型至少可以确保放得下dword并且确保可以放得下一个指针。而dword类型长度是固定的32位,与操作系统无关。

测试时,出现在一个系统函数waveOutOpen中,反复走读代码并没发现代码逻辑上存在问题,调试进去,也未发现值错误,因此了解此函数的结构,

MMRESULT waveOutOpen(
  LPHWAVEOUT phwo,
  UINT uDeviceID,
  LPWAVEFORMATEX pwfx,
  DWORD dwCallback,
  DWORD dwInstance,
  DWORD fdwOpen
);

在微软的msdn中给出的结果是这样的,而跟到代码头文件为

WINMMAPI MMRESULTWINAPI waveOutOpen( __out_opt LPHWAVEOUT phwo, __in UINT uDeviceID,

    __in LPCWAVEFORMATEX pwfx, __in_optDWORD_PTR dwCallback, __in_opt DWORD_PTR dwInstance, __in DWORD fdwOpen);

此时出现的dworddword_PTR差别在win64平台下就引起了问题,如果在win64平台下需要传入dword_PTR类型的数据现在传入dword类型就会出现崩溃的现象。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值