• ベストアンサー

VB6で、C言語の(argv,argc)みたいな、コマンドライン引数を実現する方法は?

Microsoft-VisualBasic6でプログラミングしてます。 外部から(不特定の)ファイル名を指定して、 VBモジュールを起動して処理をしたいのですが、 C言語でいう、(argv,argc)みたいなものを使って(いわゆるコマンドライン引数)、 VBプログラミングする方法を教えて下さい。 <実行例>  ・(モジュール名) (任意のファイル名)   vbmodule.exe sample-a.cvs

noname#2802
noname#2802

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.5

これで取得可能です。 ファイルをドラッグしてきたときは、ファイルのパスが入ります。 複数のドラッグの場合は、スペース区切りでやってきます。 注意すべきは、昔のDOS企画に添わないスペースや、ファイル名が8文字以上のあるファイルは、ダブルコーデーションで覆われて渡されます。 例 c:\1.txt "C:\Program Files\Microsoft Visual Studio\VB98" c:\Winnt\win.exe といった感じです。 ※注意 Uboundだけでは使用できませんのであしからず・・・ Sub Main()   Dim strPara As String   strPara = Command()      MsgBox strPara End Sub 上記のソースで試してみましょう。 開発環境では ツールバーの[プロジェクト(P)] <<プロジェクト名>>のプロパティ を選択して、 [実行可能ファイルの作成]の中にある、コマンドライン引数に文字列を入れてあげると、毎回コンパイルして実験しないでも、開発環境でテストができます。

noname#2802
質問者

お礼

とてもわかり易いアドバイス、ありがとうございました。

その他の回答 (4)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.4

コマンドの引数の分解などはSplit関数を使用すると簡単です。 添え字の無い文字型配列を宣言しておいて 文字列配列()=Split(Command$," ") とすると分解できます。 何件あるか、はUBound(文字列配列())で取得できます。

noname#2802
質問者

お礼

ご回答、ありがとうございました。

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.3

「Command 関数」で、お望みのことができます。 試しに、次のようなプログラムをコンパイルして、引数にいろいろ書いて動かしてみて下さい。   Private Sub Form_Load()    Text1.Text = Command  ← Text1 という名前のテキストボックスを作って…   End Sub これで TEST.EXE を作成したとすると、例えば   TEST sample-a.cvs で、テキストボックスには sample-a.cvs と表示されます。 Command 関数のヘルプで使用例を見ると、もっと詳しい情報(argc/argv のように各ワードに分解する方法など)が書かれていますので、ご参照下さい。 以上、VB6 SP5 で確認しました。

noname#2802
質問者

お礼

ご回答、ありがとうございました。

回答No.2

Commandという関数で取得できますよ。 以下例。 Dim strCmdLine As String strCmdLine = Command() 以上 をForm_Loadに記述すれば、 strCmdLineには"sample-a.cvs"が入ります。

noname#2802
質問者

お礼

ご回答、ありがとうございました。

  • yoshioz
  • ベストアンサー率28% (10/35)
回答No.1

Command$という関数がパラメータを文字列で持っています。 複数のパラメータを使用する場合は、 スペースで分割する必要があります。

noname#2802
質問者

お礼

ご回答、ありがとうございました。

関連するQ&A

  • C言語でコマンドラインの引数について。

    コマンドラインで引数をわたす基本的なプログラムは main(int argc,char *argv[]){....] ですよね。 今回実行時に、 >実行ファイル名 123 + 233 といれたら、123+233を計算してくれるプログラムを作ろうとしています。 その場合、main(int argc,int *argv[]){} としたら、argv[1]に123が入って、argv[2]に+が入って、argv[3]に233が、入るというわけではないんでしょうか? とりあえず、確認で #include<stdio.h> main(int argc,int *argv[]) { printf("%d\n%d\n",argv[1],argv[3]); } としてみたんですが、実行結果は、とても長い数字がでてきてきました。 なにがいけないのか教えてください。 お願いします。 あとWindows MEでVC++6を使ってます。

  • コマンドライン引数 *argv[]はなぜポインタ?

    C言語初心者です。 コマンドライン引数、 int main(int argc, char *argv[]) というのを最近勉強しましたが、引数2番目がポインタになっている理由について、 どなたか教えて下さい。 そういう仕様なんだから、それに従いましょう、ということでしょうか? int main(int argc, char argv[]) では、ダメなのでしょうか? このポインタでの引数渡しについて、 なんらかの納得のいく考え方をご存知の方がいらしたら、教えて下さい。 宜しくお願い致します。

  • 【C言語】コマンドライン引数の標準入出力

    【C言語】コマンドライン引数の標準入出力 コマンドライン引数で、ファイル名を3つ渡します。-aの次のコマンドライン引数が、出力ファイル名です。 <<例>> ・実行モジュール -a 出力ファイル名 -b ファイル名 -c ファイル名 ・実行モジュール -c ファイル名 -a 出力ファイル名 -b ファイル名 もし出力ファイルが指定されなかった場合に、標準入出力を使いたいのですが、どうしたらいいかわかりません。 下記がソースの一部です。これをどう改造したらよいでしょうか。 分かる方いらっしゃいましたらご回答いただけると幸いです。 宜しくお願いします。 //出力ファイルを取得、書き込みモードでオープン for(j=1;j<argc-1;j++){ if(strcmp(argv[j],"-o")==0){ if((fo = fopen(argv[j+1],"w"))==NULL){ printf("open error!!\n"); exit(1); } } } while(fgets(buf,sizeof(buf),fp)!= NULL){ if(strstr(buf,"keyword")!= NULL){ //出力ファイルに出力 fprintf(fo,"%d:%s",line,buf); } }

  • コマンドラインから引数を渡すことについて

    ----------------------------------------------- #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[ ]) { FILE *fin,*fout; char ss[256]; if(argc != 3){ printf("引数の数が違います\n"); exit(1); } if((fin=fopen(argv[1],"r"))==NULL){ printf("入力ファイルをオープンできません\n"); exit(1); } if((fout=fopen(argv[2],"w"))==NULL){ printf("出力ファイルをオープンできません\n"); exit(1); } while(fgets(ss,256,fin)!=NULL){ fputs(ss,fout); } fclose(fin); fclose(fout); return 0; } ----------------------------------------------- 以上のプログラム名は「tcopy.cpp」でコマンドプロンプトから実行し、ファイルをコピーするという事を行っていきます。 「aaa.txt」と「bbb.txt」の2つを用意し、「aaa.txt」の内容、 abcdef ABCDEF 012345 を「bbb.txt」にコピーしていきます。 そこで疑問なのですが、ファイルをコピーする際、コマンドプロンプトから、 >tcopy aaa.txt bbb.txt と打ち込むとコピー出来るようであり、「tcopy」、「aaa.txt」、「bbb.txt」が引数になるという事なのですが、何故この3つが引数になるのかという事と、 int main(int argc,char *argv[ ]) のargcに引数が何故代入されるかが分かりません。 後、「aaa.txt」と「bbb.txt」がargv[1]とargv[2]に何故対応しているかが分かりません。 教えていただければ嬉しいです。

  • VBでコマンドラインから引数を受け取る方法・・・

    【Visual Basic6.0】 VBでバッチプログラムを作ろうと思っております。 それで、コマンドライン引数を受け取る方法は あるのでしょうか? C言語でいうargv[]のような類なのは存在するのでしょうか?? よろしくお願いいたします。

  • C言語でのコマンドライン引数の内部での処理のされ方

    C言語でint main(int argc, char *argv[])とメイン関数を宣言します。 2番目の引数はC言語の文法的にいうと文字列へのポインタの配列だとおもいますが、一般的な関数でこの引数に値を渡すとすると、以下のように宣言されたポインタ配列を渡すことになるとおもいます。 ・宣言 char *pa[]; ・関数への渡し func(pa); 話が元に戻りますが、main関数でもらう場合は、プログラム外部から与えられた引数は(正確に言うとアドレス)、メモリ上ではC言語で書かれたexeファイルの外から実行時にプログラムファイルのメモリ上にコピーされるのでしょうか? 自分でもうまく表現できないのですが、 ・コマンドプロンプトで引数を与えて実行         ↓ ・プログラムファイルのメモリ上に引数がロードされる ということでいいんでしょうか? 自分でもなんだかうまく表現できないので、お暇な方でよろしいので、気が向いた人、回答ください。 よろしくお願いします。

  • Cocoa をコマンドラインから実行して引数を受け取りたい

    C・Objective-C に関して全くの初心者ですが、よろしくお願いします。 Cocoa で作ったアプリをコマンドラインから実行して、渡した引数を NSObject のサブクラスで受け取りたいのですがどうしたらよいでしょうか。 main.m の main 関数で受け取る方法はわかったのですが、サブクラス MyObject.m 内の任意のメソッドに渡す方法がわかりません。 // 引数を受け取って表示する int main(int argc, char *argv[]) {   fprintf(stdout, "%s\n", argv[1]);   return NSApplicationMain(argc, (const char **) argv); } ご教示いただけますと幸いです。

  • コマンドライン引数の区別【C言語】

    コマンドライン引数の区別【C言語】 コマンドラインから二つの引数(ファイル名)を渡すとき、順番が替わっても大丈夫なようにして、それぞれファイルオープンをしたいです。(エラーで”順番が違います”と出力するのはNGです) どうしたら区別できますか。分かる方いらっしゃいましたらご教授願います。 サンプルコードを書いていただけると幸いです。 宜しくお願いします。

  • コマンドプロンプトを使用してのコマンドライン引数

    winXPのコマンドプロンプトを利用して 参考書「独習C」を使い、C言語の学習をしています。 その本の7.4の項目~main()の引数~で main(int argc,char *avgv[])を利用すると コマンドラインから引数をとることができるとありますが 私の学習環境ではうまくいきません。 具体的には #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1; i<argc; i++) printf("%s ", argv[i]); return 0; } というプログラムを実行しても何も表示されません。 どうすればコマンドライン引数を利用できますか?

  • PHP コマンドライン 引数 C実行

    失礼します。現在PHPからCで作成したexe(実行ファイル)を呼び出したいのですが Visual studioでやった時のようにargc,argvに引数を渡して実行する記述の方法がわかりません。 ご教授頂きたいです。何卒よろしくお願いします。 $c_start = "./Server.exe"; $c_result = exec("この中での記述方法がわからないです"); 何か例えで記述していただけると嬉しいです。