将字符串数组传递给多个进程的 for 循环中的 CreateProcess

Pass an string array to CreateProcess in for loop for multiple processes

本文关键字:进程 for 循环 CreateProcess 数组 字符串      更新时间:2023-10-16

我不得不承认,我在这个代码中不熟悉的大多数win32 api东西。话虽如此,我想将我所知道的融入到我的学习过程中。我正在尝试创建一个 for 循环,每次都会使用不同的参数多次CreateProcess。在Visual Studio中,我收到一个编译错误:

source.cpp(138): error C3867: 'std::basic_string<_Elem,_Traits,_Alloc>::c_str': function call        missing argument list; use '&std::basic_string<_Elem,_Traits,_Alloc>::c_str' to create a     pointer to member
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Alloc=std::allocator<char>
1>          ]

运行以下代码时:

std::string arrString[3] = {"dir","cd ..","dir"};
            int i;
            LPWSTR cmd =L"cmd";
            for(i=0; i<3; i++)
            {
            STARTUPINFO info={sizeof(info)};
            PROCESS_INFORMATION processInfo;
            if (CreateProcess(cmd, arrString[i].c_str, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
            {
                ::WaitForSingleObject(processInfo.hProcess, INFINITE);
                CloseHandle(processInfo.hProcess);
                CloseHandle(processInfo.hThread);
            }

我甚至朝着正确的方向前进吗?

编辑:

            std::string arrString[3] = {"cmd","cmd","cmd"};
            int i;
            LPWSTR cmd =L"cmd";
            for(i=0; i<3; i++)
            {
                STARTUPINFO info={sizeof(info)};
                PROCESS_INFORMATION processInfo;
                vector<wchar_t> cmdline(arrString[i].begin(), arrString[i].end()); 
                CreateProcessW(cmd, &cmdline[0], NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
                    ::WaitForSingleObject(processInfo.hProcess, INFINITE);
                    CloseHandle(processInfo.hProcess);
                    CloseHandle(processInfo.hThread);
            }

在这一行中

if (CreateProcess(cmd, arrString[i].c_str, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))

当你的意思是arrString[i].c_str()时,你写了arrString[i].c_str.