C++ 调用CreateProcessW(移动MFC)时BSTR到LPCWSTR的转换
我有一个运行在WindowsMobile6上的小activex控件。当我硬编码应用程序名L“\blah\blah.exe”时,我能够使用apiCreateProcessW 当我调用另一个API返回一个BSTR,其中包含我要传递给CreateProcessW的应用程序时,它不起作用。我已经检查并填充了应用程序字符串,但我正在检查BSTR和LPCWSTR之间的转换问题(宽cha错误?)。我试过用OLE2CW和OLE2W转换它 我不是一个风险投资专家,我只需要让这个工作,所以我的问题是C++ 调用CreateProcessW(移动MFC)时BSTR到LPCWSTR的转换,c++,visual-studio,visual-c++,mfc,visual-c++-2010,C++,Visual Studio,Visual C++,Mfc,Visual C++ 2010,我有一个运行在WindowsMobile6上的小activex控件。当我硬编码应用程序名L“\blah\blah.exe”时,我能够使用apiCreateProcessW 当我调用另一个API返回一个BSTR,其中包含我要传递给CreateProcessW的应用程序时,它不起作用。我已经检查并填充了应用程序字符串,但我正在检查BSTR和LPCWSTR之间的转换问题(宽cha错误?)。我试过用OLE2CW和OLE2W转换它 我不是一个风险投资专家,我只需要让这个工作,所以我的问题是 当我通过API
BSTR app = NULL;
_host->GetAppString(_T("app"),&app);
CreateProcessW(app,L"22222",0,0,0,0,0,0,0,&processInformation);
字符集是Unicode
谢谢根据(另外),您可以使用\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);
不需要转换BSTR,它与LPCWSTR兼容。这不会变得更好,除非你添加正确的错误处理,这样你就知道它失败的原因了;不要把它加在上面。我得到的唯一错误是系统找不到指定的文件。我认为BSTR字符串与windows CE系统(不是32位)上的LPCWSTR不完全兼容。“未找到文件”是一个非常常见的错误,我们不太可能帮助您找到该文件。确保它是完整路径,如c:\foo\bar\baz.exe。你当然应该在你的问题中记录这一点。不,CE是32位的。关于CE你是对的。没有文件路径C:\。CE文件路径为\\。我知道这条路是正确的。我指定硬编码是有效的。如果我的问题激怒了你,如果我没有给你足够的信息,请忽略我的问题。我很抱歉。嗨,Edward,看起来从API返回的BSTR被编码为ANSI。当我将其写入文件时,它包含正确的路径,但缺少第二个字符示例“\\dummy\dummy.exe”,但当我写入用L创建的BSTR时“我得到了额外的空格示例o\d\d\d\d。我做了一些研究,似乎它也可以被编码成ANSI。但我不确定如何将其转换回广域。我没有意识到Windows CE的MFC包含
CString
——上面编辑的答案使用CStringW