2011-09-14 112 views
9

在調用Win32 API函數時,將A字符追加到末尾而不是W字符有什麼區別。Win32 API中的`A`和`W`函數有什麼區別?

我知道這意味着ASCIIWIDE CHARACTER或Unicode,但輸出或輸入有什麼不同?

例如,如果我調用GetDefaultCommConfigA,它是否會用ASCII字符串而不是WCHAR字符串填充我的COMMCONFIG結構? (反之亦然爲GetDefaultCommConfigW)

換句話說,我怎麼知道是什麼編碼字符串中,ASCII或UNICODE,它必須是由我打電話AW功能的版本?正確?

我找到了這個question,但我不認爲它回答了我的問題。

回答

18

A函數使用Ansi(不是ASCII)字符串作爲輸入和輸出,而W函數使用Unicode字符串代替(NT4及更早版本上的UCS-2,W2K及更高版本上的UTF-16)。 Refer to MSDN瞭解更多詳情。

+4

+1 - 另外需要記住的是,所有作爲參數傳遞給它們的結構也都是A和W版本;所以例如RegisterClassExA使用一個使用ANSI LPCSTR的WNDCLASSEXA,而W版本使用LPCWSTRs - 這會阻止您將WCHAR傳遞給A版本,反之亦然 - 如果嘗試,您會得到關於類型的編譯器錯誤匹配 - 一個相當常見的初學者錯誤是使用強制轉換使錯誤「消失」,而不是在沒有強制轉換的情況下更改代碼以使用正確的類型。 – BrendanMcK

相關問題