• 締切済み

Application->Run();の機能について

Borland C++でApplication->Run();は どういう機能を持っているのですか? WinMain関数内で実行されますが、関数を実行した プログラムは、どこから始まるのですか? 後は、フォームからのイベント待ちになるのでしょうか?

みんなの回答

  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.1

Application->Run()はメインフォームのメッセージループを開始します。 メッセージループでは、GetMessageを行い、メインフォームが閉じられない間、TranslateMessageとDispatchMessageを呼び続けます。 DispatchMessageでは、GetMessageで取ったメッセージに従い、フォーム上のコントロールのイベント処理ルーチンを呼び出します。 つまり「Application->Run()を呼ぶ=メッセージループする=フォームからのイベントを待つ」です。 メッセージループでメインフォームが閉じられると、メッセージループを終了し、Application->Run()から元に戻ります。 Application->Run()から元に戻れば、WinMainがreturn 0で終了し、ランタイムライブラリルーチンが後始末を行ったのち、アプリケーションが終了します。

関連するQ&A

  • 初めての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などのコンソールプログラムは実行できます。 サンプルプログラムそのままなのですが、なぜ上のプログラムは実行できないのでしょうか。

  • WinMainの第3引数のlpszCPを・・・

    WinMainの第3引数のlpszCPを使うのをやめたとたんに Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 警告 W8057 program.cpp 335: パラメータ 'lpszCP' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland という警告が出始めたのですが普通lpszCPは使わないものなのではないでしょうか? 警告を回避するにはどうしたらいいでしょうか?

  • Windowsアプリケーションをどうしても作りたいのですが

    /* OS==XP コンパイラー==Borland C++5.5 */ #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { return 0; } で Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) となるのでexeファイルができません。 解決法を是非教えてください。 C言語歴2日+1H

  • DxLibについて質問です

    DxLibを使ったプログラムがコンパイルできません。 下がそのプログラムです #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) { return -1; } DrawBox(100,100,300,300,GetColor(255,255,255),TRUE); WaitKey(); DxLib_End(); return 0; } http://p.booklog.jp/book/46490/chapter/77396 このサイトに従って、DXライブラリを使うセットアップをしたのですが、 下のようなエラーコードが出てきます。 ■C:\Users\masaki\Desktop\C> bcc32 windows.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland windows.cpp: 警告 W8022 C:\borland\bcc55\Include\DxDirectX.h 6121: 'D_CTransInPlaceFilter::Transform(D_IMediaSample *)' が仮想関数 'D_CTransformFilter::Transform(D_IMediaSample *,D_IMediaSample *)' を隠蔽する 警告 W8094 C:\borland\bcc55\Include\DxLib.h 100: #pragma comment( <type> [,"string"] ) の使用法に誤りがある 警告 W8094 C:\borland\bcc55\Include\DxLib.h 101: #pragma comment( <type> [,"string"] ) の使用法に誤りがある 警告 W8094 C:\borland\bcc55\Include\DxLib.h 102: #pragma comment( <type> [,"string"] ) の使用法に誤りがある 警告 W8057 windows.cpp 13: パラメータ 'hInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 windows.cpp 13: パラメータ 'hPrevInstance' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 windows.cpp 13: パラメータ 'lpCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) 警告 W8057 windows.cpp 13: パラメータ 'nCmdShow' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: ファイル SHELL32.LIB が開けません shell32.libが開けないとあり、自分でも調べたのですが、自分にはその内容が理解できず、このサイトに質問を投稿しました。 コンパイラは、Borland C++ Compiler 5.5.1 OSは、Windows 7 Ultimate エディタは、CPad for Borland C++ Compiler ver.2.3.1 です。 よろしくお願いします。

  • 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. 終了.....

  • C++builderにおけるwhile()の使い方

    はじめまして、当方プログラムの初心者ですのでわかりづらい質問をしていますかもしれませんがよろしくお願いします. (質問)Borland C++ Builderを使っています。現在困っている点は単純に説明します.プログラムではウィンドウ上のボタンを押したというイベントが起きるとwhile()の無限ループに入るようになっています.このままだと実行したときにフリーズしてしまうのでwhile内にApplication->ProcessMessageを入れてあります. void __fastcall TMain_Form::Button1Click(TObject *Sender) {  while(1){ Application->ProcessMessage .............. } } このようなwhile突入ボタンがひとつのときはいいのですが、複数のボタンを作って、それぞれに対応するwhileを実行したいのですが、どうしてもひとつだけ動いて他が止まってしまいます. どなたか無限ループをマルチスレッドで複数、回らせる方法を教えてください. また、なんでもかんでもProcessMessageをいれてやればWINMAINに処理が移って、マルチスレッドになると思って使っているのですが間違いでしょうか? よろしくお願いします.

  • excel2000 vba のrunメソッド

    ■はじめに excel2000で、excel2007のファイルを開く際、関連付けられたプログラムで開きたかったので、 openメソッドではなく、runメソッドを使って開くことにしました。 ファイルは狙い通りに関連付けられたプログラムで開けたのですが、ファイルを開いてから、次の 処理に向かう際に下記異常があります。 1つめ・・・runメソッドの第2パラメータ(ウインドウの表示方法)を指定しても効かない 2つめ・・・runメソッドの第3パラメータ(起動したプログラムの終了を待つかどうかを指定)をtrueにすると ずっと、マクロが実行中になってしまう ■相談したいこと 上記の問題点を解決するために、どのような修正を加えればいいか、教えてもらえないでしょうか? 下記、プロシージャでは、runがずっと実行中になってしまいます。第3パラメータをfalseにすると、 ファイルは開きますが、その後の処理(ここではThisWorkbook.Activate)が出来ません。 ■↓当方で作成したプロシージャ Sub ファイルを検索して開く() Dim fname As String Dim fpass As String Dim objWShell Set objWShell = CreateObject("WScript.Shell") With Application.FileSearch .NewSearch .LookIn = "C:\Users\new\Desktop\データベース" .Filename = Format(Range("A1").Value, "yyyymmdd") & "_" & "*.xlsx" .SearchSubFolders = True .FileType = msoFileTypeExcelWorkbooks If .Execute > 0 Then fpass = .FoundFiles(1) fname = Dir(fpass) objWShell.Run fpass, 7, True MsgBox "ファイルを開きました" Workbooks(fname).Close SaveChanges:=False Else MsgBox "対象ファイルはありませんでした" End If End With ThisWorkbook.Activate End Sub

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

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

  • フォームアプリケーションをmain関数に

    初めまして。プログラミングを始めて1ヶ月程度の超初心者です。 開発環境はBorland C++ Builder 6 です。 ボタンやエディットボックスを含むフォームアプリケーション(フォーム:Form1)、 Button1をクリックするとファイルオープンダイアログを開き、選択されたファイル名をEdit1に表示 Button2をクリックするとファイルセーブダイアログを開き、選択されたファイル名をEdit2に表示 Button3をクリックするとEdit1で指定されたファイルを開き、演算した結果をEdit2で指定したファイルに書き込み、保存する といったプログラムを作成しました。 これらを全て、「入力ファイル名」と「出力ファイル名」を引数とするmain関数に組み込もうとしているところで、Button1Click(Sender)などを使えばそのまま流用できるところまではわかったのですが、フォームを含め、これらのクラスのmain関数内での使い方がよくわかりません。 クラスの定義などはヘッダーファイル内でされているだけではmain関数内では使用できないのでしょうか? 定義や宣言の仕方について具体的にお教え願います。 よろしくお願いします。

  • C++ アプリケーション作成の質問

    いま、C++を勉強して日記帳のアプリを製作してます。(Visual C++使用中・Microsoft のあれです) 近い将来にJavaを使っゲームのアプリを作ってみたいと思っていて色々なプログラミング言語に対応している wide studio に乗り換えようかと思っています。 質問なんですが、 wide studio、Visual C++、BorlandのC++Compiler等たくさんありますが、『このソフトだと○○ができないが他はできる(○○にはアプリを作成する上でアプリに付け足せる機能(?)です。機能は例えば。。。イベントというものでしょうか?すみません勉強不足ですm(_ _)m)』とか『これは参考書がたくさんあって進め易い』等のいい点、使いにくい点を教えてください

専門家に質問してみよう