質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Q&A

解決済

1回答

1540閲覧

MFCでCreateProcessが実行できない。

tokotaku

総合スコア63

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

0グッド

0クリップ

投稿2023/04/10 08:19

編集2023/04/10 08:20

MFCを起動したときにNotepadを起動させたいのですがうまくできません。
CreateProcessを利用しているのですが、必ずアクセス違反が発生してしまいます。

特に変更点のない、作成したばかりのプロジェクトで発生してます。
ビルドエラーはなく、実行時に下記のエラーが出るだけです。

初回例外が 0x77911E10 (ntdll.dll) で発生しました (myApp.exe 内): 0xC0000005: 場所 0x007D0936 の読み取り中にアクセス違反が発生しました。
ハンドルされない例外が 0x77911E10 (ntdll.dll) で発生しました(myApp.exe 内): 0xC0000005: 場所 0x007D0936 の読み取り中にアクセス違反が発生しました。

CreateProcessは、Dlg.cppの以下のように記述しております。
なぜアクセス違反が起きるのでしょうか?

BOOL myAppDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します。 // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、 // Framework は、この設定を自動的に行います。 SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定 SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定 // TODO: 初期化をここに追加します。 TCHAR npad[] = _T("notepad"); STARTUPINFO si; PROCESS_INFORMATION pi; CreateProcess(NULL, npad, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。 }

<環境>
使用言語:VC++
開発環境:VisualStudio2013
Windows10(64bit)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

STARTUPINFO を適切に初期化しましょう。

ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si);

投稿2023/04/10 08:32

int32_t

総合スコア21535

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokotaku

2023/04/10 23:08

ありがとうございます。 なるほど、初期化でしたか・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問