web-dev-qa-db-ja.com

MFCアプリケーションでコマンドライン引数を取得する方法

コマンドラインパラメータが渡される小さなダイアログベースのアプリケーションが欲しいので、VC++ 6を使用して、アプリケーションウィザードを実行し、MFCダイアログアプリケーションを選択しました。

これには、コマンドラインパラメータが自動的に装備されていません。それで、MSDNに行って、これらのメモリを更新しました。 MSDNでは、すべてのC++プログラムにmain()またはwmain()関数のいずれかがあり、argcなどの引数がここに入ると述べています。先ほど作成したアプリケーションにはこれらがありません。

アプリケーションへのエントリポイントである関数が明らかにあるので、ここで引数を貼り付けることはできますか?私はこれを試しましたが、実際に正しい関数を編集していたとは思いません。 (プロジェクトの設定などからmain()関数として機能している関数を見つけることはできますか?)

基本的に、プログラムでコマンドラインパラメータを読み取るにはどうすればよいですか。

副業としても。単純なプログラムの場合、これをMFCアプリケーションにしたくないので、MBを超えるサイズになります。非MFCダイアログアプリケーションを作成できるアプリケーションウィザードテンプレートライブラリはありますか?

22
karthik

GetCommandLine()を使用すると、実行されているファイルの名前が返され、その後に引数が続きます。

アプリケーションメンバーm_lpCmdLineyourApp.m_lpCmdLineのように使用)には、引数のみが含まれます。

また、便利な CWinApp :: ParseCommandLine() もあります。

また、ATL COMウィザードを使用して、MFC以外のダイアログアプリケーションを作成します(.dllではなく.exeオプションを選択します)。

37
karthik

はい、 CWinApp:ParseCommandLine を参照してください。 CCommandLineInfo クラスも確認してください。

5
Marius Bancila

MFCアプリケーションでは、エントリポイント関数は、main()またはwmain()のような「initInstance()」です。 initInstance()CWinApp::m_lpCmdLineを使用して、コマンドラインにアクセスします。

2
coder12

生のコマンドラインを取得するには、次のコードを使用します(すべてのWin32/MFCアプリケーションで機能します)。

TCHAR *pCommandLine = ::[GetCommandLine()][1];
int nArgc = 0;
LPWSTR *pArgv = ::CommandLineToArgvW(pCommandLine, &nArgc);

引数が指定されていない場合、nArgcは1であり、存在する場合は1より大きくなければなりません。次に、pArgv 1 が最初の引数になります。

0