Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MFC AppWizard(DLL)でのイベント追加

18 views
Skip to first unread message

てる

unread,
Dec 25, 2008, 9:52:00 PM12/25/08
to
こんにちは、VC++6.0で操作していますがバージョンは問いません。

ウィンドウを持たない処理の中でCOMを活用しようと思っています。
OCXでのメソッド、プロパティ、イベントといった実装追加は何ら問題ありませんが、今回ターゲットがウィンドウを持たないために上手くいきませんでした。(当然、実行時不可視とかオプションは一通り試したつもりですが、理解不足かも)
ということで、MFC
AppWizard(DLL)でトライと思ったのですが、メソッド、プロパティの実装追加は問題ないのですがイベント追加が理解できなくてつまづいています。
ATLでのイベント追加のノウハウは検索できたので組み上げて、こちらは動作はできたのですが、今回はMFCでのDLL(COM)で・・・という話で相談にのってください。

UETA, Shin-ichi

unread,
Dec 26, 2008, 7:20:20 AM12/26/08
to
こんにちは、植田です。

てる wrote:
> ウィンドウを持たない処理の中でCOMを活用しようと思っています。

まず前提として、クライアントは、ウィンドウを持たないけれど、COMオブジェクトの
ホスティングには対応できる、ということですよね?
もし、それすらも期待できない場合、ActiveX/COMはあきらめ、普通のDLLとして
コンポーネント化し、単純に関数をエクスポートするのが無難でしょう。
イベントは自前の仕組み(コールバック関数など)で作り込むことになります。

てる wrote:
> ということで、MFC AppWizard(DLL)でトライと思ったのですが、メソッド、プロパティの
> 実装追加は問題ないのですがイベント追加が理解できなくてつまづいています。
> ATLでのイベント追加のノウハウは検索できたので組み上げて、こちらは動作は
> できたのですが、今回はMFCでのDLL(COM)で・・・という話で相談にのってください。

MFCとActiveX/COMの相性はあまりよくないので、ATLでできるならそれに越した
ことはないのですが、それはともかく ――

残念ながら、ウィザードではOCX以外のCOMオブジェクトのイベントをサポート
していないようですね。おそらく、手作業で作り込まなければならないでしょう。
ActiveX/COMにおけるイベントの仕組みはOCXに限定されたものではないので、
『MFC ActiveX ControlWizard』で生成されたソースコードが参考になるはずです。

とはいえ、MFCのハッキング(MFCのソースコードを読むこと)が必要になるかも。

あるいは、OCXとして作成しておきながら、ただのCOMオブジェクトとして使う
こともできなくはないので、そういったアプローチも検討してみては?
OCXはOLE(埋め込みオブジェクト)を発展させたもので、クライアントとの所定の
セッションを通じて最終的にOCXとしての振る舞いが可能になります。
裏を返せば、そういった手順を踏むまではただのCOMオブジェクトでしかない
わけです。

ただし、それはそれでMFCのハッキングが必要だった記憶が... (苦笑)
OCXとして埋め込まれることを前提としている箇所があるでしょうから、
そういった部分をうまく回避しなければなりません。

--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:ue...@usdesign.jp


てる

unread,
Jan 5, 2009, 7:21:01 PM1/5/09
to
返信どうもです。

あるクラスから派生させてチョイチョイ・・・なんてのを期待していたのですが、”難有り”ですかね。

ATLを避けたかった理由は幾つかあるんですが、もう少し評価してみます。

ありがとうございました。

0 new messages