none
Form1.hにコーディングした関数を他の.cppからコールする方法を教えてください。 RRS feed

  • 質問

  • VC++2005 Express Edition
    CLR Windows フォームアプリケーションでフォームを作りました。
    Form1 の中にリッチテキストボックスを作り、そこに他のcpp からのメッセージを表示したいと思っています。
    下記のコーディングをしたところ、LK2001 のエラーが出てしまいます。
    当方C++の知識が低いため、解決方法が見つかりません。

    Form1.h の内容
      ・
      ・
    #pragma endregion
     public: System::Void  メッセージ表示(char* buffer){
      String^ str_work=gcnew String(buffer);
      this->MsgRichTextBox->Text=this->MsgRichTextBox->Text+str_work;
      delete str_work;
     }
     private: System::Void SelectButton_Click(System:Surprisebject^  sender, System::EventArgs^  e) {
      ・
     MainProcess();
      ・

    a.cpp の内容
    #include "stdafx.h"
    #include "a.h"
    #include "Form1.h"
      ・
      ・
    int MainProcess(){
      ・
      ・
     メッセージ表示("aa");
      ・
      ・
    a.h の内容
    System::Void  メッセージ表示(char* buffer);
      ・
      ・
    ちなみに現在は
     String^ MainProcess(){ とし、・・・・a.cpp
     this->MsgRichTextBox->TextMainProcess();・・・・Form1
    で一度に表示しています。
    発生時に、その都度表示したくアドバイスをお願いします。

     

    2007年6月10日 4:07

回答

  • Akira Inoueさん アドバイスありがとうございました。

     

    Form1 のインスタンスを参照できるようにして、

    form1->メッセージ表示("aa");

    の方法で問題解決をしました。

     

      int MainProcess(){

         ...

    Form1 f;

        f.メッセージ表示("aa");

         ...

      }

    のコーディングで、メッセージ表示を呼ぶことができました。

     

    メッセージ表示 関数の中で、RichTextBoxのTEXTにデータを入れるところでつまずいていますが、

    もう少し自分で考えてみます。

     

    2007年6月11日 8:21

すべての返信

  • C++/CLR で、ヘッダファイルに関数がインラインで記述されているので混乱しているのだと思いますが・・・

     

     c_beginner さんからの引用

    a.h の内容

    System::Void  メッセージ表示(char* buffer);

     

    これは、不要です。

     

    むしろ、a.h に

     

    int MainProcess();

     

    を記述する必要があります。

     

    そして、Form.h の SelectButton_Click メンバ関数で MainProcess() をコールしているのですから、

    Form.h の始めに

     

    #include "a.h"

     

    を追加します。

     

    エラーはこれが原因では。

     

    あと、

    System::Void  メッセージ表示(char* buffer)

    の引数は char* buffer でなくても String^ str などでも良いような気がしますが、

    コードが省略されすぎていて、全体的な部分が読み取れないので、とりあえず補足として書いておきます。

     

     c_beginner さんからの引用

    ちなみに現在は

    String^ MainProcess(){ とし、・・・・a.cpp

    this->MsgRichTextBox->TextMainProcess();・・・・Form1

    で一度に表示しています。

    発生時に、その都度表示したくアドバイスをお願いします。

     

    こちらも、何がやりたいのか今ひとつ読み取れないので、アドバイスできません。

     

    2007年6月10日 10:29
  • おっと、大事なところを見落としていました。

     

     c_beginner さんからの引用

    int MainProcess(){

      ・

      ・

     メッセージ表示("aa");

      ・

      ・

     

    メッセージ表示関数は Form1 のメンバ関数ですので、このままだと呼び出せませんね。

    Form1 のインスタンスを参照できるようにして、

    form1->メッセージ表示("aa");

    などとするか、

    手っ取り早いのは、MainProcess関数を Form1 クラスのメンバにしてしまうことでしょうか。

     

    Form1.h

     

    Code Snippet

    public ref class Form1 : ...

    {

      public:

      System::Void メッセージ表示(...){

         ...

      }

     

      int MainProcess(){

         ...

        メッセージ表示("aa");

         ...

      }

     

      private:

      System::Void SelectButton_Click(System:bject^ sender, System::EventArgs^ e) {

         ...

        MainProcess();

         ...

      }

    }

     

    2007年6月10日 11:21
  • Akira Inoueさん アドバイスありがとうございました。

     

    Form1 のインスタンスを参照できるようにして、

    form1->メッセージ表示("aa");

    の方法で問題解決をしました。

     

      int MainProcess(){

         ...

    Form1 f;

        f.メッセージ表示("aa");

         ...

      }

    のコーディングで、メッセージ表示を呼ぶことができました。

     

    メッセージ表示 関数の中で、RichTextBoxのTEXTにデータを入れるところでつまずいていますが、

    もう少し自分で考えてみます。

     

    2007年6月11日 8:21