在进行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);
此时出现的dword与dword_PTR差别在win64平台下就引起了问题,如果在win64平台下需要传入dword_PTR类型的数据现在传入dword类型就会出现崩溃的现象。