2011-05-13 22 views
1

hello全部 我有來自開源項目的代碼,即將集成到我的代碼中。 現在我在Visual Studio 2008字符集中的代碼設置是Unicode。並且外部代碼是 多字節字符集。當我在添加新源代碼後在我的應用程序中更改字符設置時,我的代碼中出現其他錯誤。
所以從網上讀取我想我需要對外部代碼進行一些更改以支持unicode。 這裏是我的代碼:win32 CreateProcess無法將參數2從'char * __ w64'轉換爲'LPWSTR'錯誤

string FullPathToExe = c:\\foo\\boo.exe; 
vector<char> str2(FullPathToExe.begin(), FullPathToExe.end()); 
    str2.push_back('\0'); 
    if (!CreateProcess(NULL, 
        &str2[0], 
        NULL, 
        NULL, 
        TRUE, 
        0, 
        NULL, 
        NULL, 
        &si, 
        &pi)) 
and the error is : 
: error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'char *__w64 ' 
to 'LPWSTR' 

我不是Win32程序員,這是新的我。

我如何支持使用多字節和Unicode的開發人員?

感謝您的幫助

+0

pszAPI從哪裏來?從問題中刪除這個,所以你可以重新發布它作爲一個新的問題。 – ralphtheninja 2011-05-13 15:27:04

回答

3

對於第一個使用vector<wchar_t>代替vector<char>
對於第二個使用L"ERROR: API = %s.\n error code = %d.\n message = %s.\n"代替"ERROR: API = %s.\n error code = %d.\n message = %s.\n"(注意L起步。

+0

第一個問題已修復,但第二個問題仍然給我錯誤:錯誤C2664:'wsprintfW':無法將參數1從'CHAR [512]'轉換爲'LPWSTR',其CHAR szPrintBuffer [512];那就是有問題的那個 – user63898 2011-05-14 04:25:34

+0

而不是使用'wchar_t szPrintBuffer [512]'。 – Dani 2011-05-14 09:12:02

1

而是執行此操作:

wstring FullPathToExe = "c:\\foo\\boo.exe"; 
    if (!CreateProcess(NULL, 
        FullPathToExe.c_str(), 
        NULL, 
        NULL, 
        TRUE, 
        0, 
        NULL, 
        NULL, 
        &si, 
        &pi)) 
+0

這不行,'FullPathToExe.c_str()'不是寬字符串 – Dani 2011-05-13 15:26:22

+0

@Dani:謝謝。編輯。 – ralphtheninja 2011-05-13 15:29:26

+0

@Dani,這是'FullPathToExe'是'wstring'。 – 2011-05-13 15:30:25

4

您需要使用std::wstringvector<wchar_t>和前綴字符串的字符,並用L.

0

a)您可能取消定義UNICODE宏在您的項目設置

b)您可以使用您調用的函數ASCII版本,用sprintf替換wsprintf,用CreateProcessA替換CreateProcess

相關問題