• ベストアンサー

ウィンドウを出したくない

OS: Windows 2000 C: Borland C++ Compiler コマンドラインアプリケーション(Hello world!的なもの)を作成しています。 別の方の質問で出来上がったexeファイル実行時ウィンドウを出したくない場合は、main()をWinMain()にすればよいとのことだったのですが、これだとコマンドラインパラメータを渡せなくなってしまいます。 コマンドラインパラメータを渡せて、かつexeファイル実行時にウィンドウを出したくない場合は、どうすればよいでしょうか? 目的はあるウィンドウアプリケーションから外部プログラムとして実行したいのですが、実行中ウィンドウがでてしまっていて、それを避けたいのです。 よろしくお願い致します。

noname#27709
noname#27709

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

  • ベストアンサー
noname#9119
noname#9119
回答No.2

GetCommandLine() でコマンドラインを得る(ただし分解するのが面倒)か、 Borland C++ Compiler なら _argc, _argv というグローバル変数があります。 #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow ) { char buf[33]; itoa(_argc, buf, 10); MessageBox(NULL, buf, "test", MB_OK); for (int i=0; i<_argc; i++) { MessageBox(NULL, _argv[i], "test", MB_OK); } return 0; }

noname#27709
質問者

お礼

ご回答ありがとうございます。 ほとんど解像なく一発で解決できました。どうもありがとうございました。 いただいた情報からさらに発展して調べたところ、 ・グローバル変数_argv,_argc ・WinMain()のlpCmdLine ・GetCommandLine() を使う方法がみつかりました。 ありがとうございます。 ところで、_argv,_argcはVisual C++でもサポートされていますでしょうか? あと、追加で質問なのですが、内部でsystem()関数で外部コマンドが出てしまうのですが、このときウィンドウが出てしまいます。これを防ぐ方法と言うのはあるのでしょうか?よろしくお願い致します。

その他の回答 (3)

noname#5537
noname#5537
回答No.4

> ところで、_argv,_argcはVisual C++でもサポートされていますでしょうか? > _argv,_argc は Visual C++ には無いみたいですね。 VC++ の場合は __argc, __argv です。(アンダースコア2つ)

noname#27709
質問者

お礼

情報ありがとうございます。 異なるのですね。できるだけコンパイラ依存したくないので、WinMain()のLPSTR lpCmdLineを使ってうまく行っています。ありがとうございます。

noname#9119
noname#9119
回答No.3

_argv,_argc は Visual C++ には無いみたいですね。 ファイルの実行には WinExec(), CreateProcess(), または spawn系 の関数なんかがあります。

noname#27709
質問者

お礼

ありがとうございます。 やはりVC++にはないみたいですね。私も探した上で質問させていただいたのですが、ありがとうございました。 プロセス実行に関しては、そんな関数があるのですね?とりあえず、spawn系を使いましたがなんとかなりそうです。他の関数も勉強してみます。ありがとうございます。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.1

exe ではなく、 dll にすればよいと思います。 エクセルなどから、 引数として、ファイル名などを 渡して呼び出せます。 もちろん、新しいウインドウは開きません。

noname#27709
質問者

お礼

ご回答ありがとうございます。 残念ながらそのアプリケーションは、dllを実行するI/Fを持ち合わせておらず、exeファイルを実行しているのですよ。 でも、Excelからdllにパラメータを与えて実行できるなんて知りませんでした。ありがとうございました。

関連するQ&A

  • Borland C++ Compilerについて。

    Borland C++ Compilerでコンパイルし、 exeファイルを実行したところ、 実行された画面が一瞬(0.1秒くらい)出て 消えてしまいました。 唯一、"Hello"を表示するプログラムは ちゃんと出ました。 原因は何でしょうか?

  • 初めてのWindowsプログラム

    初めてのWindowsプログラム #include <windows.h> #include <stdio.h> char* Title ="加算プログラム"; int AddNum(int a,int b) { return a +b; } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hDummy,LPSTR lpszArgs, int iMode) { int i; char s[80]; i = AAddNum(123, 456); sprintf(s, "123+456=%d",i); MessageBox(NULL,s,Title,MB_OK); return 0; } このプログラムなんですが、実行すると次のようなエラーが出ます。 ■C: C> bcc32 test.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: 警告 W8065 test.c 16: プロトタイプ宣言のない関数 'AAddNum' の呼び出し(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'hInst' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'hDummy' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'lpszArgs' は一度も使用されない(関数 WinMain ) 警告 W8057 test.c 21: パラメータ 'iMode' は一度も使用されない(関数 WinMain ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) コンパイラはBorland C++ 5.5.を使っていて、printfなどのコンソールプログラムは実行できます。 サンプルプログラムそのままなのですが、なぜ上のプログラムは実行できないのでしょうか。

  • Visual Windows for BC++ のサンプルプログラムがエラーになる

    Visual Windows for BC++ をインストールした直後に、新しいプロジェクトをwindows型でつくり、サンプルプログラムをビルドしたところ、うまく実行ファイルができ、正常に動作しました。 次に、OpenCVを http://nautilus.cs.miyazaki-u.ac.jp/~yoshi/pukiwiki/index.php を参考にダウンロードして、 インクルードファイルの検索パスに3つ: C:\Program Files\OpenCV\cv\include、C:\Program Files\OpenCV\cxcore\include、C:\Program Files\OpenCV\otherlibs\highgui ライブラリファイルの検索パスに1つ:C:\Program Files\OpenCV\lib を追加しました。 OpenCVのサンプルプログラムをビルドしようとしたのですがエラーになり先に進みません。それどころか、インストール直後にビルドできたサンプルプログラムもエラーが出るようになってしまいました。 エラーが発生したため、brc32.exe を終了します。 となります。 コンパイルも、以下の警告が出るようになってしまいました。 私の設定が悪いのでしょうか、それとも、Visual Windows for BC++では、OpenCVは扱えない ということでしょうか? よろしくお願いします。 Visual Windows for BC++, Copyright (c) 2003-2007 M. Yasue: proj1.exe ビルド実行中..... Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ..\hello.cpp: 警告 W8060 ..\hello.cpp 30: おそらく不正な代入(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 41: パラメータ 'hPrevInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 41: パラメータ 'lpCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 ..\hello.cpp 95: パラメータ 'message' は一度も使用されない(関数 __stdcall OnPaint(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8057 ..\hello.cpp 95: パラメータ 'wParam' は一度も使用されない(関数 __stdcall OnPaint(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8004 ..\hello.cpp 130: 'wmEvent' に代入した値は使われていない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) ) 警告 W8057 ..\hello.cpp 183: パラメータ 'lParam' は一度も使用されない(関数 __stdcall About(HWND__ *,unsigned int,unsigned int,long) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland リソースファイルコンパイル・リンク実行中..... Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. 終了.....

  • bcpadでコンパイルできない

    この前学校でbcpadをつかった授業があったので家でやってみようと思い、 Borland C++ Compiler 5.5 とCPad for Borland C++Compiler をインストールして設定もしました。 そしてbcpadに #include<stdio.h> int main(void){ printf("Hello World"); return 0; } と入力し、保存してコンパイルしてみました。 しかし、以下のようなエラーメッセージが出ました。 「コンパイルに失敗しました ファイル"C:Users\aaaa\downloads\Documents\C\hello.exe" は存在しません」 また下のメッセージのところには hello.cpp: Error E2379 hello.cpp 7: Statement missing ; in function main() *** 1 errors in Compile *** と出ていました。 何がダメなのか全くわかりません。 OSはwindows7です。 どなたか詳しい方ご教授をお願いします。

  • C++の実行

    Borland C++ Compiler 5.5をインストールして、 コンパイルはできましたが、 exeファイルを実行できません。 どうしたらよいでしょうか?

  • Borland C++ Compiler

    学校のC言語の授業で使用するので、Borland C++ Compilerをインストールしました。 今までに作ったプログラムや、教科書に載っていたサンプルプログラムをコンパイルして軽い勉強をしていたのですが、コンパイルの際にエラーが出るようになりました。 コマンドプロンプトでbcc32と打つと、パラメータのリストのようなものが出てくるので、-nなど適当にパラメータをつけて実行したら以下のようなエラーが出るようになりました。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) objとtdsファイルは出力されるのですが、exeが出力されません。 どうやったらなおるか、教えてください。

  • bcpadについて

    すみません。 Cを学び始めたばかりの学生です。 早速ですが質問です。 Borland C++CompilerとCPadfor Borland C++Compilerのセットでプログラムを組んでいます。 そのときにコンパイルは出来るのですが、実行時に「パッチファイルとして認識されていません」。とでてすぐに画面が閉じてしまいます。 コマンドプロンプトにおいて「path」で実行可能ファイルの検索パスを表示させるとc:\borland\bcc55\binがでできますし、「bc32」で著作権などの情報がでるのですが・・・。 またC:\borland\bcc55\Binにbcc32.cfgとilink32.cfgも作成しています。 しかし「setbcc」でパス設定をしてみるとPATHの設定に失敗したとなります。 OSはWindows Vistaです。 ご教授の程よろしくお願いします。

  • コンソールアプリの起動パラメータ について

    ・環境   XP, Borland C++ Compiler 5.5 ・使用言語   C++ コンソールアプリを作成しています。 コンパイルして出来上がったEXEのアイコンに、何かファイルを ドラッグ&ドロップすると、そのファイルがパラメータとなって EXEが起動されると思うのですが、ここで疑問があります。 (1)最大パラメータ数というのはどこかに規定されているのでしょうか。 (2)複数のファイルをドラッグ&ドロップした時に、EXEに渡される順番というのはどのように決定されるのでしょうか。 よろしくお願い致します。

  • BCC Developerについて。

    Borland C++ Compiler、BCC Developerを使って #include <stdio.h> void main(){ printf("Hello C world.\n"); } をメイクしてみたのですが、 インクルードファイル 'stdio.h' をオープンできない 、と表示されコンパイルできませんでした。 環境設定は、コンパイラにbbc32.exeを指定すればいいだけなんでしょうか?よろしくお願いします。

  • Borland C++ Compiler 5.5

    ここで教えてもらってBorland C++ Compiler5.5とCPadをつかってるんですが、 #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; rreturn 0; } と入れると、 「hello.exeがありません」(helloは保存データの名前) と出るんです。 古いバージョン専用のスクリプトなのですか? それとも設定ミスですか? 教えてください。