プロセス(calc.exe)を作成しようとしましたが、プログラムが正しく実行されません。開始後にクラッシュするだけです。問題はLPWSTR変数ですが、修正する方法はわかりません。CreateProcessが失敗しました。予期しないエラー
以下は私のコードです。
#include "stdafx.h"
#include <Windows.h>
#include <cstdio>
#include <string>
using namespace std;
void NewProcess(LPWSTR cmd) {
printf("Argv Inside funcion: %s\n", cmd[1]);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(NULL,
cmd,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi)
)
{
printf("CreateProcess failed (%d).\n", GetLastError());
return;
}
printf("Process ID: %d Started", pi.dwProcessId);
WaitForSingleObject(pi.hProcess, INFINITE);
printf("\nProcess ID: %d Terminated!", pi.dwProcessId);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
void main(int argc, TCHAR *argv[])
{
char text[] = "calc.exe";
wchar_t wtext[20];
mbstowcs(wtext, text, strlen(text) + 1);
LPWSTR ptr = wtext;
NewProcess(ptr);
getchar();
}
CおよびC++「AREN同じ言語を使う。適切なものだけを使ってタグ付けする。 – tambre
正確にどこがクラッシュしますか?デバッガの下でプログラムを実行する場合は、正確なコード位置とその場所(呼び出しスタック)につながる関数呼び出しのシーケンスがわかります。 – zett42
解決済み...悪いです。ソーリー。問題はwprintf( "Argv Inside functions:%s \ n"、cmd [1])にありました。この行のeditidコードを忘れてしまった。cmdが配列だったので、cmd [1]に問題があった。 – bielu000