• ベストアンサー

VC++ ATLコントロールのインスタンス

VC++2008で、ATLコントロールクラスを追加し、 そのクラスにPublicメソッドを追加しました。 (IXxxxインタフェースを右クリック→追加→メソッドの追加) この追加したメソッドを、同じプロジェクト内のMFCクラスから 呼びたい(実行したい)と思っています。 ただ、ATLコントロールクラスがインスタンスできない為、 呼ぶことができません。 (「抽象クラス型のオブジェクトは使用できません」のエラーが出る) MFCクラスのメソッド→ATLコントロールクラスのメソッドを実行 というのは、不可能なのでしょうか? ご存知の方がおられましたら情報をください。 宜しくお願いします。

  • MIKAG
  • お礼率100% (2/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • buihyaku
  • ベストアンサー率29% (97/326)
回答No.1

似たようなことをやったことがあります。 よくわからないままコードをぱくってきたのですが、こんな感じでインスタンスを作成して呼び出しができていました。 -------- CComObject<コントロールクラス名> *pObj; CComObject<コントロールクラス名>::CreateInstance( &pObj ); IDispatch** retObj; HRESULT hr = pObj->QueryInterface( IID_インタフェースID?, (void**)retObj); コントロールクラス名 *nobj = (コントロールクラス名*)*retObj; nobj->呼び出したいインタフェース(); -------------- 間違ってるかもしれませんが、多少でもヒントになれば幸いです。

MIKAG
質問者

お礼

buihyakuさん 早速のお返事大変ありがとうございました。 実際、教えて頂いた内容で実行しましたが、 HRESULT hr = pObj->QueryInterface( IID_インタフェースID?, (void**)retObj); の所で実行時エラーがでました。 (ビルドはエラーなくできました) 私なりにエラー内容について調べたいと思いますが、 もし何か情報をお持ちでしたら、また教えて頂きたいと思います。 宜しくお願いします。

その他の回答 (1)

  • buihyaku
  • ベストアンサー率29% (97/326)
回答No.2

よくみたら、IDispatch*の実体がないので、こうじゃないと受け取れないような気もします。 IDispatch* retObj; HRESULT hr = pObj->QueryInterface( IID_インタフェースID?, (void**)&retObj);

MIKAG
質問者

お礼

buihyakuさん 回答有難う御座います。 再度実行してみましたが、結果は同じでした。 ますます気になります。

関連するQ&A

  • VC++/MFCでリフレクション

    Javaでは、ObjectのgetClass()でClassクラスの インスタンスが取れ、実行時に指定した、メソッド名や、引数で、動的にメソッドを呼びだすようなリフレクション機能が使用できます。 同様のことをC#でも実装したことがあります。 VC++/MFCにて、このようなリフレクションをやるやり方を教えてください。 C++の標準あるいわ、MFCの機能など、どちらでもよいです。 メタクラス型のようなものを実行時に取得して、リフレクションする方法だと思います。 質問の内容はVC++.NETやVC++/CLIではないです。そちらのほうでのやり方は既に発見しました。

  • VBA,ASPなどから呼び出せるDLLの作成

    DLLを作成したいです。 開発環境 OS:WindowsXP HOME SP2 IDE:Visual C++ 2005 作成したいのはBASP21 DLL(http://www.hi-ho.ne.jp/babaq/basp21.html)のようなVBA、VBScriptから呼び出せるDLLです。 以下のように作成しました。 1 新規プロジェクト>ATLプロジェクト(プロジェクト名:dlltest)   (ダイナミックリンクライブラリ・非属性、デフォルト) 2 プロジェクト>クラスの追加>ATLシンプルオブジェクト(クラス名:cl1、オプションはデフォルト) 3 作成されたインターフェースIcl1を右クリックしてメソッドを追加   メソッド名:mtest1 質問したいのはこのメソッドで値を呼び出し側に返す方法です。 COMの仕様で返り値はHRESULTと聞きました。 LONG型の引数を受け取って2倍した値を返すメソッドみたいな簡単な サンプルの記述方法を教えてください。お願いします。

  • クラス?オブジェクト?インスタンス?何がなんだか・

    一般的なオブジェクト指向の 定義として下記で合っているのでしょうか お願いします クラス:第2実体(人間) インスタンス:第1実体(例:山田) オブジェクト:色々なインスタンスをさして、抽象的に総称としてオブジェクト 例えば・・クラス:人間、インスタンス:山田 クラス:犬、インスタンス:ゴン 違うクラスのインスタンスをまとめて呼ぶ際にオブジェクト? よく分からなくなっています、よろしくお願いします

  • [VC][ATL] 'ImageList_Read'が定義されていない!というエラーになるのは?

    VC++.NET 2002+WTL7.0で開発をしています。 アプリケーションウイザードでMFCアプリケーションを作成して、クラスの追加から「ATLのサポート」を追加します。そして、stdafx.hに #include "atlapp.h" #include "atlctrls.h" を記入すると 'ImageList_Read'が定義されていない というエラーになってしまいます。 とりあえずatlctrls.h内のエラー発生箇所をコメントアウトすることで対応しているのですが...どのようにしたらエラーがでないようにできるのでしょうか?よろしくお願いします。

  • クラス、オブジェクト、インスタンス、メソッドについて。

    クラス、オブジェクト、インスタンス、メソッドに ついて教えていただけないでしょうか? 今現在の自分の認識では、乗り物を例にすると、 「乗り物」という大枠がクラス。それを、たとえば 飛行機なり電車なり船なり、より具体的にした ものがインスタンス=オブジェクト。 その具体化したものの挙動、動作(走るとか飛ぶとか) がメソッド、という理解です。 ただ、これだとオブジェクトとインスタンスを 同じものとして見てしまっているので、この2つの 違いを明確に説明しろと言われると困ってしまいます。 インスタンスとオブジェクトの違いを明確にした上で うまく伝えられる方法があれば、ご教授ください。

  • VC++でActiveXコントロールを作りたいのですが

    IEから <OBJECT CLASSID="CLSID:***"></OBJECT> で使えるActiveXコントロールを作りたいのですが、よくわかりません。 VC++では、MFC ActiveX ControlWizard で、ActiveXコントロールが作れるようですね。とりあえずプロジェクトを作って、そのまま何もしないActiveXを作って、ブラウザで表示したいと思っても、どのようにしたらいいのか、そこから分かりません。 HTMLを書いて、ブラウザで表示させようとしてますが、何か抜けていたり、おかしかったりするでしょうか。 かなり情報不足かもしれませんが、何かヒントがいただければと思います。よろしくお願いします。

  • スプラッシュコントロールの挿入方法について

    スプラッシュウィンドウを表示させようとして、 ネットで調べた所、 VCのメニューから プロジェクト→プロジェクトへ追加→コンポーネントおよびコントロール →Visual C++ Components→スプラッシュスクリーン で挿入すると書いてあったのですが、 「メインフレームクラスが見つかりません!」と言われてしまいます。 ダイアログベースで作成した場合、 どのようにしたら、このコントロールを挿入するの事が出来るのでしょうか? #Win98、MFCで作成しています。 新規クラス作成ではCMainFrameクラスはないし・・・ 行き詰まってしまいました。 お手数ですが、教えて頂けないでしょうか?

  • CxxxViewのインスタンスはいつ作られるの?

    環境はWIN98 VC++6.0 MFCです。 今まで何も考えずウィザードに任せて、CxxxView内にコードを書いていましたが、良く考えるとCxxxViewってクラスですよね。 そうするとどこかでインスタンスが生成されていると思うのですが、どれはどこなのでしょうか?

  • 抽象クラスのオブジェクトを生成できない理由は?

    ・抽象クラスは、なぜ(オーバーライドしないと)オブジェクトを生成できないのでしょうか? ・インタフェースみたいに、抽象メソッドしか宣言することができないなら話は分かるのですが… ・抽象メソッドでない普通のメソッドを実装できるのなら、オブジェクトを生成してくれても良いと思うのですが… ・そういう問題ではない?

    • ベストアンサー
    • Java
  • インターフェース

    インターフェースについて学ぼうと思っているのですが、 どうもいまいち何がなんだかわからなくなっています。 インターフェースはクラスによって実装され、 実装クラスはインターフェースで宣言されている 抽象メソッドを実行する とあるのですが、実装とは何ですか? 抽象メソッドとは何ですか?

    • ベストアンサー
    • Java

専門家に質問してみよう