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类型就会出现崩溃的现象。

你可能感兴趣的:(dword与dword_ptr类型的区别及64位系统下调用系统函数直接崩溃的问题)