ActiveXにメソッドを追加するには?

解決


なべ  2005-05-17 20:42:26  No: 57424

Visual Studio 2002のVC++でActiveXを作成し、VBから利用しようとしています。
コントロールにメソッドを追加したのですが、VBから参照可能になりません。
idlファイルに追加したメソッドの定義が追加されていないので、
このためだと思うのですが、正しい手順が判らず困っています。

〜〜〜今の手順〜〜〜
① [ファイル]→[新規作成]→[プロジェクト]→MFC ActiveXコントロール でXXXプロジェクトを作成
② クラスビューを表示し、ツリービューのCXXXCtrlクラスを右クリックしてメソッドを追加
〜〜〜〜〜〜〜〜〜〜

MSDNライブラリの以下の説明に従っているつもりなのですが...。

http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_core_activex_controls.3a_.adding_custom_methods_to_an_activex_control.asp?frame=true

右クリックのショートカットメニューの[追加]からは、
[メソッドの追加]ではなく[関数の追加]と表示されます。
また、[関数の追加]を選択した時に表示されるダイアログも
「メソッド追加ウィザード」ではなく「メンバ関数の追加ウィザード」ですし、
内容も微妙に違うようです(「内部名」というテキストボックスはない)。

ちなみに、VC++6.0でプロジェクトをMFC ActiveX Control Wizardで作成し、
ClassWizardでメソッドを追加した時には、odlファイルに宣言が追加され、
VBからも参照・呼び出しが可能になっていました。

初歩的な手順の問題とは思いますが、ご助言お願いします。


forty-five  2005-05-18 06:41:05  No: 57425

CXXXCtrl クラスじゃなくて,
IXXXCtrl インターフェイスを右クリックすれば
多分 [メソッドの追加] が出てくると思います。


なべ  2005-05-18 19:45:39  No: 57426

forty-five さん
レスありがとうございます。

「今の手順」で、VC++.NETでMFC ActiveXコントロールプロジェクトを作成すると、
初期状態ではクラスビューにはIXXXCtrlというクラスは作成されていないです。
何か1ステップ必要なのでしょうか?

が、「追加しようとしている場所が違うんだな」という観点で見直したところ、
クラスビュー上に_XXXLibというライブラリと、その下に_DXXXというインターフェイス定義がありました。
これを右クリックすると、「メソッドの追加」が選択でき、idlファイルにも定義が追加されました。
VBからの呼び出しも確認できました。

ちなみに、VC++6ではClassWizardから追加していたので意識がなかったのですが、
見直すとやはり_DXXXというインターフェイス定義があり、ここからもメソッドの追加ができるようです。

一応、やりたいことは実現できたのですが、
ご指摘頂いたのと「インターフェイス」の名前が違うので、
一般的な手順からズレているのでは、と、若干不安です。
皆さん普通はどうされてるんでしょうか...。

宜しくお願いします。


forty-five  2005-05-19 03:42:13  No: 57427

すみません, ATL プロジェクトと勘違いしてました。
MFC なら _DXXX が生成されるのでそれでいいみたいです。
失礼しました。


なべ  2005-05-19 20:11:13  No: 57428

とてもスッキリしました。
ありがとうございました。


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

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






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