2010-06-17 191 views
3

CreateProcess和CreateProcessA之間有什麼區別,在VC++ 2008中也有這些選擇嗎?CreateProcess和CreateProcessA有什麼區別?

我也有一個問題,我使用CreateProcessA函數,這在一個系統中運行良好,但在其他系統中失敗。

而且當我使用的CreateProcess我得到的錯誤無法從「CHAR [40]」轉換2參數爲「LPWSTR」我在Unicode模式

回答

7

首先,CreateProcess是一個在CreateProcessA和CreateProcessW之間切換的宏,它們分別採用ANSI或Unicode字符串。這取決於您的項目構建設置(字符集項目屬性),Unicode與多字節。一般而言,您希望事物採用Unicode,因爲這可以實現全球化,並增加了允許更多支持語言的選項。

將字符轉換爲LPCWSTR的抱怨顯示它期望使用WSTR或寬字符串或unicode字符串。解決方法是使用_T(「blahblah」)宏聲明您的字符。

3

CreateProcess是相同的或者CreateProcessA(「ANSI」)或CreateProcessW(「寬字符」),具體取決於您是否正在編譯沒有或啓用unicode選項的代碼。

區別在於,作爲參數傳遞的字符串應該是ANSI(8位字符)還是Unicode(16位字符)字符串。


也有替代品,如ShellExecuteEx

+0

我也有一個問題,我使用CreateProcessA函數,這在一個系統中運行良好,但在其他系統中失敗。可能是什麼原因。還有其他功能嗎? – pradeep 2010-06-17 11:01:49

+0

@rajivpradeep - 「可能是什麼原因」調用'CreateProcessA'失敗後,GetLastError()函數返回的值是多少? – ChrisW 2010-06-17 11:05:35

+0

A代表「ANSI」,但答案是相同的(ASCII是僅7位字符集) – 2010-06-17 11:06:44