2013-07-29 50 views
0

我有一個小的activex控件在Windows mobile 6上運行。我能夠使用api CreateProcessW當我硬編碼應用程序名稱L「\ blah \ blah.exe「BSTR到LPCWSTR轉換時調用CreateProcessW(Mobile MFC)

當我調用另一個API返回一個包含我想傳遞給CreateProcessW的應用程序的BSTR時,它不工作。我已經檢查並填充了應用程序字符串,但我在猜測我在BSTR和LPCWSTR(Wide cha error?)之間存在轉換問題。我試圖用OLE2CW和OLE2W轉換它。

我不是VC專家,我只需要得到這個工作,所以我的問題是。

  1. 當我通過API接收到一個BSTR時,如何將它轉換爲能夠將它傳遞給CreateProcessW中的Application參數?這是Windows Mobile 6(Wince 5.2)。代碼片段會很好。

代碼示例無需任何轉換:

BSTR app = NULL; 

_host->GetAppString(_T("app"),&app); 

    CreateProcessW(app,L"22222",0,0,0,0,0,0,0,&processInformation); 

的字符集是Unicode。

感謝

+0

沒有必要轉換BSTR,它是兼容的與LPCWSTR。在添加適當的錯誤處理之後,這將不會變得更好,因此您*知道*爲什麼失敗。 –

+0

嗨漢斯,我確實添加了錯誤handeling,但沒有;不要在頂部添加它。我得到的唯一錯誤是系統找不到指定的文件。我相信一個BSTR字符串與Windows CE系統上不是32位的LPCWSTR不完全兼容。 – Rikardt

+0

「文件未找到」是一個非常常見的錯誤,我們可以幫助您找到該文件。確保它是完整路徑,如c:\ foo \ bar \ baz.exe。你當然應該在你的問題中記錄下來。不,CE是32位的。 –

回答

0

根據this MSDN article(也this SO article),您可以通過使用_bstr_t類提取wchar_t指針,就像

_bstr_t bsApp(app, true); 
wchar_t *pApp = (wchar_t *)bsApp; 
CreateProcessW(pApp, L"22222", 0, 0, 0, 0, 0, 0, 0, &processInformation); 

編輯:使用CString的

CStringW ss = app: 
CreateProcessW(ss, L"22222", 0, 0, 0, 0, 0, 0, 0, &processInformation); 
+0

嗨,Edward,它看起來像從API返回的BSTR被編碼爲ANSI。當我將它寫入文件時,它包含正確的路徑,但缺少第二個字符示例「\\ dummy \ dummy.exe」,但是當我編寫一個用L創建的BSTR時「我得到了額外的空間exampleo \ dd \ dd \ dd \ d。我做了一些研究,它似乎也可以編碼爲ANSI。不知道如何將其轉換回WIDE – Rikardt

+0

我沒有意識到MFC for Windows CE包含'CString' - - 編輯上面的答案以使用'CStringW' –