掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
エラーにならないようにするには? (ID:20512)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンソールアプリケーションから複数のプログラムを 起動しようと思っているのですが、起動できないので、 以下のようなテストプログラムを作成してみたところ、 CreateProcessでエラーが発生しているようです。 エラーの内容は「メモリ ロケーションへのアクセスが無効です。」 となります。 もちろん TSSGetThread.Create(false); の代わりに ProgramExecute; を 使用すると正常に動作します。 program Test; {$APPTYPE CONSOLE} uses Windows, Classes, Forms, SysUtils; type TSSGetThread = class(TThread) private protected procedure Execute; override; public end; function ProgramExecute: bool; var SI: TStartupInfo; PI: TProcessInformation; WinDir: array [0..255] of Char; CmdFile: String; CmdLine: String; ErrorCode: Integer; Buff: array[0..255] of Char; begin GetWindowsDirectory(WinDir, SizeOf(WinDir)); FillChar(SI, SizeOf(SI), #0); SI.cb := SizeOf(SI); SI.dwFlags := STARTF_USESIZE or STARTF_USEPOSITION; SI.wShowWindow := SW_SHOW; CmdFile := StrPas(WinDir) + '\NOTEPAD.EXE'; CmdLine := CmdFile + ' README.TXT'; Result := CreateProcess(PChar(CmdFile), PChar(CmdLine), nil, nil, False, 0, nil, WinDir, SI, PI); if not Result then begin ErrorCode := GetLastError; writeln('CreateProcess End (' + IntToStr(ErrorCode) + ')'); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, ErrorCode, LANG_SYSTEM_DEFAULT, Buff, 255, nil); WriteLn( Buff ); end end; procedure TSSGetThread.Execute; begin ProgramExecute; end; begin { TODO -oUser -cConsole Main : この下にコードを記述してください } TSSGetThread.Create(false); // ProgramExecute; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.