none
實作鬆散耦合的事件出現錯誤訊息 RRS feed

  • 問題

  •  

    :::小女子利用VS 2005來建立以下的網址來建立鬆散耦合的事件

    http://msdn.microsoft.com/zh-tw/library/480d36ch.aspx

     

    並撰寫以下程式:

    Imports System
    Imports System.IO
    Imports System.Reflection
    Imports System.EnterpriseServices
    Imports System.Runtime.InteropServices
    Imports System.Windows.Forms

    <Assembly: ApplicationName("EventDemo")>
    <Assembly: ApplicationActivation(ActivationOption.Library)>

    Namespace EventDemo
        Public Interface ILceMsg
            Sub EventMethod(ByVal message As String)
        End Interface
        <ComVisible(True), EventClass()> _
        Public Class LceClass
            Inherits ServicedComponent
            Implements ILceMsg
            Public Sub EventMethod(ByVal message As String) Implements _
                  ILceMsg.EventMethod
            End Sub
        End Class

        <ComVisible(True)> _
        Public Class LceSink
            Inherits ServicedComponent
            Implements ILceMsg
            Public Sub EventMethod(ByVal message As String) Implements _
                  ILceMsg.EventMethod
                MessageBox.Show(message, "Event sink")
            End Sub
        End Class
    End Namespace

    Imports MyServicedComponent.EventDemo

    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim evt As ILceMsg = CType(New LceClass(), ILceMsg)
            evt.EventMethod("Hello events")
        End Sub
    End Class

    執行時出現以下錯誤

     

    無法將型別 'System.__ComObject' 的 COM 物件轉換為介面型別 'MyServicedComponent.EventDemo.ILceMsg'。由於發生下列錯誤,介面 (IID 為 '{8C783A18-91C5-3632-B4EE-1453F93A483D}') 之 COM 元件上的 QueryInterface 呼叫失敗而導致作業失敗: 不支援此種介面 (發生例外狀況於 HRESULT: 0x80004002 (E_NOINTERFACE))。

     

    請問該如何解決???謝謝!!!

     

    2008年7月2日 上午 04:43

解答

  • :::不好意思,小女子己經自己解決問題了

    主要是因為在Public Interface ILceMsg沒有設定ComVisible屬性所導致

    <ComVisible(True)> _

    Public Interface ILceMsg

    .....

     

    修改之後再用regsvcs來註冊服務元件,再針對此服務元件新增一個訂閱

    便可以執行!!!

    2008年7月3日 上午 01:22