none
VB2008 Main となるような関数 RRS feed

  • 質問

  • 申し訳ないのですが OS初心者なので教えて欲しいのですが

    VBの場合 C言語で言うmain()関数のようにいつも動作しているような SUBを宣言できるんでしょうか。

    Form1とかがそれに近いように思うのですが。Form1に無限ループを作るとForm1自体(ボタンなど)が現れなくなります。

     

    たとえば

     

    *********************

    Static  int A =0; // May be modified by int Func

     

    main()

    {

    for( ; ; ){

            If(A==1)  //Waiting

              { Subprocess1();}

           else

              {; // Do nothing}

           } //End loop

    }

       

    ************************ 

    見たいなことできないのでしょうか
    2008年7月14日 5:11

回答

  • スレたてて放置したみたいですが、ご容赦ください。ご教授いただいたかた皆様ありがとうございます。VBの用語の理解があやふやで、メンバとインスタンスを間違ったりして、うまく質問できていないです。そこを汲み取ってお答えいただいていますが、自分の理解スピードが遅くまた、HELPの説明も難解なためぜんぜん前に進めません。やはり参考プログラムを見てみるべきなのでしょうか。 

    2008年7月17日 1:59

すべての返信

  •  strcat さんからの引用

    申し訳ないのですが OS初心者なので教えて欲しいのですが

    OS初心者とは一体何かよく分かりません。

    Windowsプログラミングの経験がないということでしょうか。

     

     strcat さんからの引用

    VBの場合 C言語で言うmain()関数のようにいつも動作しているような SUBを宣言できるんでしょうか。

    .NETでの開発においては、ずっと動作しているようなコードは隠蔽されています。(メッセージループを回している部分を意図しています)

    フォーム(ウィンドウ)を表示する必要がなく、コンソールに文字を出すようなアプリであれば、コンソールアプリケーションとしてプロジェクトを作成して下さい。

     

     strcat さんからの引用

    Form1とかがそれに近いように思うのですが。Form1に無限ループを作るとForm1自体(ボタンなど)が現れなくなります。

    Form1を表示しつつ、何らかのループ処理を行いたいのであれば、その処理によって対応方法が異なります。

    定期的に何かするだけであればTimerコントロールを使い、ずっと裏で走らせたいならBackgroundWorkerコンポーネントやThreadクラス・ThreadPoolクラスを使うことを検討しましょう。

     

     

    とりあえず、Windowsプログラミングについて馴染んでおいた方が良いかと思います。

    C言語がどうとか、VBがどうとか、C#がどうとか以前に、概念的なものを学んでおかないと、低レベルな部分の話は難しく感じますので。
    2008年7月14日 5:21
    モデレータ
  • ご教授ありがとうございます。

    OS初心者とは,WINDOWSプログラミングの初心者と言う意味に近いです。タイマーで定期的にイベントを発生させるという考え方が思いつかないのです。Windowsでのプログラミングに慣れるために、質問させていただいてます。お時間あれば以下教えていただけませんか。

    1)

    VBでもっとも判らないのが、グローバル変数(Static変数)をプログラム上の各イン関数が参照するということをどう考えているかです。

    2) Form1とは、なんのためにあるのですか。 Form1クラスのインスタンスとして宣言すればForm1内で宣言されるすべての変数(Subなどと同じ階層)は、たのSubからStatic変数としてアクセスできるのですか

     

     

    2008年7月14日 6:29
  • 外池と申します。

     

    まず、私の独断で、(もし、的外れだったら、平にご容赦を)

     

    strcatさんがイメージしておられる(作りたいと思っておられる)プログラムは、VB2008で言うところの「コンソール・アプリケーション」だと思います。VB2008で「ファイル」メニューで「新しいプロジェクト」に進めば、アプリケーションのタイプを選んで作り始めることができますので、そこで「コンソール・アプリケーション」を選択してください。そうすれば、まさに、Sub Main()で始まるプログラムが書けるようになります。コンソール・アプリケーションですので、ビルドして出来上がったexeファイルを実行すれば、コマンド・プロンプトの画面(超昔風に言えば「DOS窓」というやつ)が現れて、文字の出力や入力ができるようになります。延々長い計算をさせつつ、途中経過の結果を文字で出力していくこともできます。

     

    一方で、

     

    Windows風の、メニューや、ボタンや、テキストを入力する箱、あと、図・画像を描く領域などを含むいわゆるウィンドウでユーザーとインターフェイスしながら動作していくプログラムも作れますが、これは「Windowsアプリケーション」と呼ばれています。(ここから先、オブジェクト指向プログラミングの用語を使います。) このアプリケーションでは、ひとつのウィンドウは、ひとつのオブジェクトです。オブジェクトを取り扱うためには、プログラムの中でクラスを定義しなければなりません。その定義がForm1です。(「Form1とは、なんのためにあるのですか。」のご質問に対する回答です。)

     

    順序が逆になりますが、VBではStaticというキーワードは、グローバル変数を意味しませんので、ご注意ください。グローバル変数とは、Module(クラスのようなものですがインスタンスは作れません。)の中でPublicで宣言された変数のことです。Moduleには、この他、プログラムのどこからでも呼び出せるSubやFunctionも置くことができます。

     

    「Form1クラスのインスタンスとして宣言すれば」以降のご質問は、申し訳ありません、ご質問自体が、私には理解できません。と言うのも、使っておられる用語の組み合わせが、VBでは意味が通らないことばかりなので。

     

     

     

    2008年7月14日 7:00
  •  strcat さんからの引用

    1)

    VBでもっとも判らないのが、グローバル変数(Static変数)をプログラム上の各イン関数が参照するということをどう考えているかです。

    .NETの開発では、グローバル変数はあまり使用しません。

    また、グローバル変数を多用すると、動きが分かりにくくなる、どこからでも書き換えができる等で不具合を生む要因になりやすく、敬遠されることが増えてきています。

     

     strcat さんからの引用

    2) Form1とは、なんのためにあるのですか。

    何のために存在するかを決めるのは、作る人次第です。

    Windowsアプリケーションではユーザからの入力を受け取ったり、情報を表示したりするための窓としてウィンドウ(フォーム)を使用します。Form1はそれのひな形として用意されているものです。

     

     strcat さんからの引用

    Form1クラスのインスタンスとして宣言すればForm1内で宣言されるすべての変数(Subなどと同じ階層)は、たのSubからStatic変数としてアクセスできるのですか

    Static変数の理解をまず考えて下さい。

    その上で、Sharedキーワードをつけた変数・プロパティ・メソッドがどのように働くかを考えて下さい。

    http://msdn.microsoft.com/ja-jp/library/zc2b427x(VS.80).aspx

     

    インスタンスのメンバである場合、インスタンスが必要であるため、どこからでもアクセスできるわけではありません。

    逆にSharedキーワードがついたメンバである場合は、クラスが使える場所ならどこでもアクセスできます。

     

     

    しかし、以前にも書きましたが、本当にstaticじゃないと実現できないのですか?

    関数の引数や、クラスのメンバーとして覆うことで避けられると可能性が高いのですが、クラスを使ってカプセル化といったことも検討してみませんか?

    2008年7月14日 7:18
    モデレータ
  •  

    ☆が付いた。(バンザイ)。strcat()さん。

    いやぁ、ウマシカれおです。

    public class form1のすぐ下の行に

    Private x As Integer = 5

    とか宣言できます。実行処理は無理みたい。

    formは、Runさせると実際は、無限loop状態です。

    Button1_Clickとかのイベントは高速言語(マシン語)ではIFの状態です。

    c++のint()とDimとか、privateの宣言は意味が全然に違います。

    勉強暦。一カ月なんでアレですが。

     

    2008年7月16日 20:53
  • vbのc++でした?

    basicと思ったんで。(汗)ではでは。
    2008年7月16日 21:11
  • スレたてて放置したみたいですが、ご容赦ください。ご教授いただいたかた皆様ありがとうございます。VBの用語の理解があやふやで、メンバとインスタンスを間違ったりして、うまく質問できていないです。そこを汲み取ってお答えいただいていますが、自分の理解スピードが遅くまた、HELPの説明も難解なためぜんぜん前に進めません。やはり参考プログラムを見てみるべきなのでしょうか。 

    2008年7月17日 1:59
  •  

    多分、strcatさんは、他の言語とかでは、プロ並?

    勉強暦が1カ月なんでアレなんですが。ここの敷居は高いみたい。

    私は、日経さんのVB2008の本を買いました。

    ループみたいな・・・のトコは、なんとなく、同じ初心者として、わかります。

    例えば、Form1をRunさせて、ボタンを押すと、COMパックマンが5匹、Formの中を走りまわす。とか簡単にできますよ。

    こうゆう感じの意味合いかな?

    サブル-チンの中に100個のサブを作れます。

    オリジナルのサブも作れます。

    VB2008は、すごいね。一番下の無料2008の奴ですけど。

    c++とかc#も原理は似てます。

    イベントの部分は、IFに見立てれば理解しやすいです。

    オブジェクトは、c++の変数の&H参照と原理は同じです。

    やり方の方法だけですね。

    2008年7月17日 19:11
  • subを100個呼べるに変更です。

    誤字、脱字はあるかも。ではでは。

    2008年7月17日 19:20