掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Activex DLLのイベントを拾うには? (ID:61344)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
何度も御丁寧にありがとうございます。 提示してくださったサイトを参考に、 MyEventHandlerクラスを追加してみました。 (参考サイトではCMyPPTEventsHandlerクラス) それで、kureさんが書いてくださった部分の >hr = pContainer->FindConnectionPoint(イベントクラスのID, &pPoint); の部分のイベントクラスのIDですが、 それはクラス追加によってMyEventHander.cppに、 static const IID IID_IMyEventHandler = {〜}; と自動生成された部分の定数 IID_IMyEventHandler の値で良いのでしょうか? ただ、MyEventHander.cpp内での定義のため、他のcppソースからでは使えないので、 参考サイトの項番6の様に、ビジネスロジックを入れるソース上にベタに、 上記の定数宣言部分を書き写してやってみました。 それでビルドして出来たexeで試してみたところ、 QueryInterface まではうまく行くのですが、 FindConnectionPoint は失敗しているようです。 これはどのような原因が考えられるでしょうか? MyEventHandlerクラスを追加するとき、 特にSampleX.dllを参照させられるような行為はなかったのですが、 そういうものなのでしょうか? ※つまり、イベント受信クラスとSampleX.dllを結びつける記述は、 ソース上のkureさんが書いてくださった部分で初めて現れる と認識していますが、それで合っていますか? 何か手順を間違った、もしくはIID_IMyEventHandlerの{〜}の部分を SampleX.dllをoleviewで見て自分で何かに書き換えないと行けない等あるので参考サイトのしょうか? 項番17の下の方に、 >クラス ウィザード が最初に生成した値から IID IMyPPTEventsHandler 静的な定数の値が変更されるように注意します。 という記述もありますし・・・。 ただ、oleviweで見た__clsSampleのuuid(〜)の値に IID_IMyEventHandlerの{〜}の中身を書き換えてみたのですが、 ビルドで、 C2021: 浮動小数点定数の指数として使われている文字 'A' が、正しい数字ではありません。 と怒られてしまいました。 9EAD14F6-501F-11D5〜・・・ のような値なので、直接入れるものではないのかも知れませんが・・・。 なお、BEGIN_DISPATCH_MAP〜END_DISPATCH_MAPの部分は、 oleviewでSampleX.dllを見て、イベントのidが0x00000001だったので、 DISP_FUNCTION_ID(MyEventHandler,"evtSample",0x00000001,evtSample,VT_EMPTY, VTS_PI2) と記述しました。 BEGIN_INTERFACE_MAP〜END_INTERFACE_MAPには、クラス生成時に、 INTERFACE_PART(MyEventHandler, IID_IMyEventHandler, Dispatch) という記述が自動で書き込まれていたので、参考サイトを見る限りこのままで良さそうだったので追記していません。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.