Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用CreateProcessW(移动MFC)时BSTR到LPCWSTR的转换_C++_Visual Studio_Visual C++_Mfc_Visual C++ 2010 - Fatal编程技术网

C++ 调用CreateProcessW(移动MFC)时BSTR到LPCWSTR的转换

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

我有一个运行在WindowsMobile6上的小activex控件。当我硬编码应用程序名L“\blah\blah.exe”时,我能够使用apiCreateProcessW

当我调用另一个API返回一个BSTR,其中包含我要传递给CreateProcessW的应用程序时,它不起作用。我已经检查并填充了应用程序字符串,但我正在检查BSTR和LPCWSTR之间的转换问题(宽cha错误?)。我试过用OLE2CW和OLE2W转换它

我不是一个风险投资专家,我只需要让这个工作,所以我的问题是

  • 当我通过API接收BSTR时,我如何将其转换为能够将其传递给CreateProcessW中的应用程序参数?这是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

    谢谢

    根据(另外),您可以使用
    \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