デリゲートの仕方教えてください


初心者  2007-09-12 20:48:30  No: 66287

VC++ で作成したDLLを  VBで使用しています。
VBで関数を呼び出し、FORMを作成していますが、
一度FORMを閉じてしまうと次からは開きません。

イベントハンドラでクローズイベントを作っているのですが
デリゲートの仕方がよくわかりません。
どう設定すればよいか教えてください。
VB上で動作しているのでクローズをどうやって認識すればよいのでしょうか?

うまく質問が伝わっているかわかりませんが
どうかよろしくお願いします。

******************
VC++ ソース
 double ABC::DEF( a,  b,  c,  d,  e,  f,  m,)
 {
  if(m == 1)
  {
    if(ff == false)
    {
    Form^ about = gcnew Form;
    ff = true;
    about->Show();
    about->Closed += gcnew System::EventHandler(???,???);
    }
  }
//
省略
//
 }

 System::Void CLOSE(System::Object^  sender, System::EventArgs^  e) {
 //this->Text = L"finish";
 ff = false;   
 }
***********


Blue  2007-09-12 21:01:40  No: 66288

> System::Void CLOSE(System::Object^  sender, System::EventArgs^  e) {
はグローバル関数?

gcnew System::EventHandler(&CLOSE);

とするとどうなりましたか?


初心者  2007-09-12 21:36:09  No: 66289

blueさん
回答ありがとうございます。

 about->Closed += gcnew***
のところで下記エラーが出てしまいます。
/*/*/*/*
 error C3364: 'System::EventHandler' : delegate コンストラクタの引数が無効です。デリゲート ターゲットはメンバ関数のポインタである必要があります。
/*/*/*/*

>System::Void CLOSE(System::Object^  sender, System::EventArgs^  e)
のところではエラー出ていないので困っています。
うまく回答できているかわかりませんが教えてください。


Mark D  2007-09-12 21:42:17  No: 66290

困る!
http://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=971


Blue  2007-09-12 21:55:21  No: 66291

>> System::Void CLOSE(System::Object^  sender, System::EventArgs^  e) {
>はグローバル関数?
の返答は?

一応
http://vene.wankuma.com/ecma372/27_delegate.aspx

27.2 デリゲート型インスタンス化
より
<引用>
各々のデリゲート型毎に、以下のような、二つのコンストラクタを持ちます。

・一つの引数、del-con-arg1 を持つコンストラクタは、静的関数や名前空間中の関数からデリゲートを作成します。
  この del-con-arg1 は静的メンバ関数のアドレス、グローバル、ないし、名前空間中の関数のアドレスで、
  インスタンス化デリゲート型において互換性があります。 

・二つの引数、各々、del-con-arg2、del-con-argl3 を取るコンストラクタがあります。
  これはインスタンス関数からデリゲートを作成するために使われます。この場合、del-con-argl2 は
   CLI クラス・インスタンスへの参照であり、del-con-argl3 はそのインスタンスの型に直接定義されたインスタンス関数のアドレスであるべきです。 

</引用>
とあります。


初心者  2007-09-12 22:10:13  No: 66292

>System::Void CLOSE(System::Object^  sender, System::EventArgs^  e) {
はグーロバルではありません。
回答おくれてすいません


Blue  2007-09-12 22:45:19  No: 66293

>グーロバルではありません。
ではどのクラスのメソッドですか?
また、そのメソッドのなかでthisを参照することはありうりますか?
→なければstaticメソッドにすれば終わり。

そうでなければどのインスタンスの関数なのかを特定するために
>about->Closed += gcnew System::EventHandler(???,???);
でインスタンスが必要になります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加