1

私がこのコードでよく知らないwin32apiのもののほとんどを認めなければなりません。そうは言っても、私が知っていることを私の学習プロセスに取り入れたいと思います。CreateProcess毎回異なる引数で複数回実行されるforループを作成しようとしています。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);

            }
4

1 に答える 1

3

この行で

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

arrString[i].c_strあなたが意味したときに書いたarrString[i].c_str()

于 2012-06-08T17:52:48.457 に答える