- ベストアンサー
VC++ ATLコントロールのインスタンス
VC++2008で、ATLコントロールクラスを追加し、 そのクラスにPublicメソッドを追加しました。 (IXxxxインタフェースを右クリック→追加→メソッドの追加) この追加したメソッドを、同じプロジェクト内のMFCクラスから 呼びたい(実行したい)と思っています。 ただ、ATLコントロールクラスがインスタンスできない為、 呼ぶことができません。 (「抽象クラス型のオブジェクトは使用できません」のエラーが出る) MFCクラスのメソッド→ATLコントロールクラスのメソッドを実行 というのは、不可能なのでしょうか? ご存知の方がおられましたら情報をください。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
似たようなことをやったことがあります。 よくわからないままコードをぱくってきたのですが、こんな感じでインスタンスを作成して呼び出しができていました。 -------- CComObject<コントロールクラス名> *pObj; CComObject<コントロールクラス名>::CreateInstance( &pObj ); IDispatch** retObj; HRESULT hr = pObj->QueryInterface( IID_インタフェースID?, (void**)retObj); コントロールクラス名 *nobj = (コントロールクラス名*)*retObj; nobj->呼び出したいインタフェース(); -------------- 間違ってるかもしれませんが、多少でもヒントになれば幸いです。
その他の回答 (1)
- buihyaku
- ベストアンサー率29% (97/326)
よくみたら、IDispatch*の実体がないので、こうじゃないと受け取れないような気もします。 IDispatch* retObj; HRESULT hr = pObj->QueryInterface( IID_インタフェースID?, (void**)&retObj);
お礼
buihyakuさん 回答有難う御座います。 再度実行してみましたが、結果は同じでした。 ますます気になります。
お礼
buihyakuさん 早速のお返事大変ありがとうございました。 実際、教えて頂いた内容で実行しましたが、 HRESULT hr = pObj->QueryInterface( IID_インタフェースID?, (void**)retObj); の所で実行時エラーがでました。 (ビルドはエラーなくできました) 私なりにエラー内容について調べたいと思いますが、 もし何か情報をお持ちでしたら、また教えて頂きたいと思います。 宜しくお願いします。