- - PR -
COMサーバのイベントを補足する方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-09 15:43
VB.NET(2005)でCOMサーバのイベントを拾いたくて
http://support.microsoft.com/kb/810228/ja の「クラシックCOM接続ポイントモデル」を参考にプログラムを作成したのですがイベントを拾ってくれません。同じCOMサーバをVC++では拾えているのですが... 【手順】 (1)プロジェクトの参照でCOMサーバを指定する。 (2)シンククラスを作成する。 Public Class LogonEvnets Implements _ILogonEvents Public Delegate Sub LoginEventHandler(ByVal currLogin As Short) Public Delegate Sub LogoutEventHandler(ByVal currLogin As Short) Public Event Login As LoginEventHandler Public Event Logout As LogoutEventHandler Public Sub OnLogin(ByVal currLogin As Short) _ Implements _ILogonEvents.OnLogin RaiseEvent Login(currLogin) End Sub Public Sub OnLogout(ByVal currLogin As Short) _ Implements _ILogonEvents.OnLogout RaiseEvent Logout(currLogin) End Sub End Class (3)Formのnewメソッド内でCOMイベントシンクを確立する 'COMサーバオブジェクト生成 objLogin_ = New Logon() 'COMサーバのキャスト Dim icpc As IConnectionPointContainer = _ CType(objLogin_, ComTypes.IConnectionPointContainer) 'イベントインタフェースのGUID取得 Dim DIID__ILogonEvents As Guid = GetType(_ILogonEvents).GUID '接続ポイントの取得(DIM icp_ as IConnectionPoint) icpc.FindConnectionPoint(DIID__ILogonEvents, icp_) 'シンクはWithEventsで宣言しています。 ev_ = New LogonEvnets() '接続確立 icp_.Advise(ev_, cookie_) (4)Formを実行する。 (5)COMサーバのログイン画面でログインする。 (; イベントを拾ってくれない。 [ メッセージ編集済み 編集者: roku 編集日時 2007-08-09 16:14 ] | ||||||||
|
投稿日時: 2007-08-09 17:31
こんにちは。
イベント接続の処理中に例外/エラーメッセージは出ていないのですか? 参考ページの「Microsoft.NET デリゲート イベント モデル」のほうでは、イベントは拾えているのですか? こっちのモデルのほうがVBらしくて手間がいらないと思いますが。 | ||||||||
|
投稿日時: 2007-08-09 17:41
こんにちは。Tdnr_Symさん。
イベント接続は例外が発生しませんでしたのでできていると思います。 またCOMサーバオブジェクトに対するメソッド呼び出し(GetUserIDなど)もできています。 もちろん真っ先に「Microsoft.NET デリゲート イベント モデル」も試してみたのですが、ログインしてもイベントハンドリングされませんでした。 | ||||||||
|
投稿日時: 2007-08-09 19:03
こんばんは。
icpc.FindConnectionPoint(DIID__ILogonEvents, icp_) の実行結果でちゃんとConnectionPointが取得できて(icp_がNothing以外) icp_.Advise(ev_, cookie_) で、cookie_にちゃんと何らかの値がセットされるということですね。
私もちょうど、VB6で作ったCOMサーバー(ActiveX EXE)があったので試してみましたが、 「クラシック COM 接続 ポイント モデル」と「Microsoft.NET デリゲート イベント モデル」の両方で イベントを拾えましたけれども。 | ||||||||
|
投稿日時: 2007-08-09 19:41
こんばんわ。Tdnr_Symさん。
icp_.Advise(ev_, cookie_) で、cookie_にはちゃんと正数が入っておりました。 COMサーバ(他社製)が怪しいような気になりました。 うまくいっているサンプルのVC++を眺めながら 別の方法を検討したいと思います。 ありがとうございました。 |
1