首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"CreateProcess()“将产生错误C2664

使用"CreateProcess()“将产生错误C2664
EN

Stack Overflow用户
提问于 2022-09-21 19:32:26
回答 1查看 60关注 0票数 0

我正在尝试从我的.cpp文件中打开一个应用程序。我做了一些研究,发现使用CreateProcess()是最好的选择。这样做会产生以下代码:

代码语言:javascript
复制
 //Below has the purpose of starting up the server: -----------------------------------------------
    LPWSTR command = (LPWSTR)"C:\\Users\\CCRT\\Documents\\UPDATED\\FINALSERVER\\FINALSERVER\\Debug\\FINALSERVER.exe";
    // Start the child process.
    LPSTARTUPINFOA si;
    PROCESS_INFORMATION pi;
   
    if (!CreateProcess(NULL,   // No module name (use command line)
        command,        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory
        &si,            // Pointer to STARTUPINFO structure
        &pi)           // Pointer to PROCESS_INFORMATION structure
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
    }
     else {
         std::cout << "Command success\n";
     }

但是,当我试图构建解决方案时,会出现以下错误:

代码语言:javascript
复制
cannot convert argument 9 from 'LPSTARTUPINFOA *' to 'LPSTARTUPINFOW' 

错误发生在CreateProcess()函数上。

我想知道是否有人能向我解释这个错误,并告诉我如何纠正它,因为我非常困惑到底是怎么回事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-21 19:37:49

无法将参数9从“LPSTARTUPINFOA*”转换为“LPSTARTUPINFOW”

您为函数提供了一个指向STARTUPINFOA 指针的指针,但该函数需要一个STARTUPINFOW指针(这就是LPSTARTUPINFOW所包含的STARTUPINFOW指针)。

因此,正确的方法是像这样定义si

代码语言:javascript
复制
STARTUPINFOW si{sizeof(STARTUPINFOW)}; // not LPSTARTUPINFOW

sizeof(STARTUPINFOW)部件将sicb成员设置为结构的大小。

另外:LPWSTR command = (LPWSTR)"C:\\U...是错的。它应该是

代码语言:javascript
复制
wchar_t command[] = L"C:\\U...";
//                  ^

L使字符串文本为const wchar_t[N] (其中N是字符串+1的长度),但由于command可能被CreateProcessW更改,所以需要将其放入可变的wchar_t数组中。

这也是最好的一致。显式地使用"wide“函数,比如CreateProcessW,除非您也计划为Ansi构建,然后保持一致性,使用STARTUPINFO (没有AW),并使用TEXT宏来定义字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73806073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档