VC++プログラムで自分自身の起動パス名を得る。
メモです。
Win32のコンソールアプリexeをVC++作って、Hello-Worldを出す。ついでにexeのパスを得る具体的プログラム記述です。
簡単な物なのですが少し触っていないとすぐ忘れる、かつ、 忘れると"具体的"記述法(ヘッダ名だとか、変数の型だとか、プロジェクトの作成 法だとか)を見つけるのに非常に時間がかかるものです。
具体的コード
次のコードで、
- コンソールへの表示(pfintfでないことに注意)
- コマンド引数(ここではargv[0]のみ)の表示
- 起動されたコマンドのフルパス名の表示
#include "stdafx.h"
#include <WINDOWS.h>
int _tmain(int argc, _TCHAR* argv[]){
_TCHAR buf[1024];
GetModuleFileName(0,buf,1024);
_tprintf(_T("hello world;argv[0]=%s %s\n"),argv[0],buf);
return 0;
}
//青色の部分が利用者記述
注意すべきは
- 文字は必ず_TCHARを使う。charは絶対に使ってはならない
- 文字列は必ず_T("...")で囲む
- char*を引数とする関数(printfなど)は絶対に使ってはならない
出力はこんな感じになります。(パス名は途中省略しました)
hello world;argv[0]=commander D:\--省略--\Release\commander.exe
VisualStudio2008でのプロジェクト生成/設定
次のように行います。
[ファイル]
[新規作成]
->[プロジェクト]
VC++
Win32 コンソールアプリケーション
(場所とプロジェクト名設定)
「アプリケーション設定ウィザード」
[次へ]
・コンソールアプリケーションにチェック
[完了]
[ビルド]
[構成マネージャ]
アクティブソリューション構成で「Release」選択
[ビルド]
[ソリューションのビルド]
.exeがReleaseフォルダの下にできることを確認
(_tmain関数でhelloWorldを出す形にして動作確認も行う方がよい)
###
本当はこんなもの(VC++)は使わずに済めばそれにこした ことはないんだけど、 dllや.netframeworkなどのシステム非標準を避けること を考えると仕方ない。
javaは起動が大変だし(jar起動だと引数が受けられない) batは無能すぎるし。。。
| 固定リンク

