• ベストアンサー

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

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

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

  • ベストアンサー
  • 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

専門家に質問してみよう