C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■93198 / )  Re[5]: vb.netで作成したCOMをvb.netでCOMとして参照
□投稿者/ KOZ (53回)-(2019/11/27(Wed) 17:57:21)
No93192 (まる さん) に返信
> イベントは捕捉できていない、という点が問題となっております。

Excel の場合だと、レイトバインドでもイベントを補足できました。

http://kozhouse.homeip.net/dotnet/etc/15/

の ComEventCaster を取り込んで、

Imports System.Runtime.InteropServices

<ComVisible(True)>
Public Class AppEventCaster
    Inherits ComEventCaster

    Public Sub New(ByVal comObject As Object)
        MyBase.New(comObject)
    End Sub

    <DispId(1565)>
    Public Sub RaiseNewWorkbook(wb As Object) '名前は何でも良い。DispId が重要
        RaiseEvent NewWorkbook(wb)
    End Sub

    Public Event NewWorkbook(ByVal wb As Object)

End Class

を作ります。

使い方は

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim app As Object = CreateObject("Excel.Application")
        Using caster As New AppEventCaster(app)
            AddHandler caster.NewWorkbook, AddressOf App_NewWorkbook
            Dim wbs As Object = app.Workbooks
            Dim wb As Object = wbs.Add()
            app.Quit()
            Marshal.ReleaseComObject(wb)
            Marshal.ReleaseComObject(wbs)
        End Using
        Marshal.ReleaseComObject(app)
    End Sub

    Private Sub App_NewWorkbook(Wb As Object)
        Me.Text = Wb.Name
        Marshal.ReleaseComObject(Wb)
    End Sub

End Class



返信 編集キー/


管理者用

- Child Tree -