個人的なコートでのメモです.
普通に exe を起動してドキュメントを開くのは問題ない.
ドキュメント付きで起動すると,ウィンドウが表示されて,ドキュメントを読込み後終了してしまっている.
デバッガで追いかけると,ProcessShellCommand の呼び出しで FALSE となっている.
原因は,ドキュメントの読込み後にアプリケーションクラスにアクセスしている所で初期化が済んでないため.
初期化のコード(RcntFM)を CCommandLineInfo の前にして対応.
// メイン MDI フレーム ウィンドウを作成 CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; m_pMainWnd = pMainFrame; // ドラッグ/ドロップ オープンを許可します m_pMainWnd->DragAcceptFiles(); { RcntFM.Read() ; RcntFM.SetStartID(ID_RECENT_FILE_00) ; } // DDE、file open など標準のシェル コマンドのコマンドラインを解析します。 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) { cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ; } // コマンドラインでディスパッチ コマンドを指定します。 if (!ProcessShellCommand(cmdInfo)) return FALSE;
これをやっていて困ったのが,ソースのタイル表示.
VS 2019 ではうまく動作するが,2017 など他のものではエラーになってしまう.
--------------------------- GLSm140: devenv.exe - アプリケーション エラー --------------------------- 0x000000006359C044 の命令が 0x0000000000000000 のメモリを参照しました。メモリが read になることはできませんでした。 プログラムを終了するには [OK] をクリックしてください プログラムをデバッグするには [キャンセル] をクリックしてください --------------------------- OK キャンセル ---------------------------
[…] 更に,幾つかのツールでうまく開けないものがあった. InitInstance での初期化手順がうまくなかった. […]