|
一个问题:如果用定义的UNICODE识别字编译了程式,程式将呼叫RegisterClassW。该程式可以在Microsoft Windows
NT中执行良好。但如果此程式在Windows
98上执行,RegisterClassW函式并未真地被执行到。函式有一个进入点,但函式呼叫後只传回0,表明错误。对於在Windows
98下执行的Unicode程式来说,这是一个通知使用者有问题并终止执行的好机会。这是本书中多数程式处理RegisterClass函式呼叫的方法:
if (!RegisterClass (&wndclass)) { MessageBox ( NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; }
由於MessageBoxW是可在Windows 98环境下执行的几个Unicode函式之一,所以其执行正常。
当然,这段程式假定RegisterClass不会因为其他原因而呼叫失败,诸如WNDCLASS结构中lpfnWndProc栏位被设定成NULL之类的错误。GetLastError函式会帮助您确定在这样的情况下产生错误的原因。GetLastError是Windows中常用的函式,它可以在函式呼叫失败时获得更多错误资讯。不同函式的文件将指出您是否能够用GetLastError来获得这些资讯。在Windows
98中呼叫RegisterClassW时,GetLastError将传回120。在WINERROR.H中您可以看到,值120与识别字ERROR_CALL_NOT_IMPLEMENTED相等。您也可以在/Platform
SDK/Windows Base Services/Debugging and Error Handling/Error Codes/System Errors
- Numerical Order查看错误。
一些Windows程式写作者喜欢检查所有可能发生错误的函式呼叫的传回值。这么做确实有点道理,相信您也非常习惯在配置记忆体後检查错误。而许多Windows函式需要配置记忆体。例如,RegisterClass需要配置记忆体,以保存视窗类别的资讯。如此一来,您就应该要检查这个函式的执行结果。另一方面说来,如果由於RegisterClass |