在VBA和WPF dll之间传递数据

本文关键字:数据 之间 dll VBA WPF | 更新日期: 2023-09-27 18:27:40

我已经从WPF应用程序中创建了一个DLL,并将其导入到我的Access/VBA项目中。

我用这些命令在DLL上创建了一个对象的实例,并打开了一个包含它的新窗口:

Dim tst As New DllName.ClassName
    tst.ShowDialog

这是正确的工作:我的窗口被正确地创建和显示。我的下一个目标是从创建的窗口中打开VBA窗口。

我会更具体:我的WPF-DLL上有一个按钮,我想打开一个访问表单。

问题是:这可能吗?

谢谢!

在VBA和WPF dll之间传递数据

我自己这样解决:

我的c#类中有一个按钮(WPF)包含:

代表声明:

public delegate void MyEventHandler();

事件接口:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("***your-guid***")]
public interface _DllAppEvents
{
    [DispId(1)]
    void MyEvent();
}

我的窗口类,它不能实现接口并包含我的按钮:

[ComSourceInterfaces(typeof(_DllAppEvents))]
[ClassInterface(ClassInterfaceType.None)]
[Guid("C7FA28F7-7A8D-45BA-9F0B-2C6CD8FB8650")]
[ProgId("TestDll.Test")]
public partial class DllApp : Window
{
    // my event
    public event MyEventHandler MyEvent;
    // button event
    void Button_Click_1(object sender, RoutedEventArgs e)
    {
        // call the event
        MyEvent();
    }
}

(注意:我使用了名称空间DllApp)

我导入tlb的VBA代码包含:

必须支持事件的全局变量:

Public WithEvents X As DllApp.DllApp 

我使用访问表单上的按钮创建WPF窗口:

Private Sub New_Click()
    Dim A As Object
    Set A = New DllApp.DllApp 
    Set X = A
End Sub

我发现我的事件添加了这个方法:

Private Sub X_MyEvent()
    MsgBox "button is clicked!"
End Sub

其中方法的名称必须是变量名称+_+事件名称(在本例中为X+_+MyEvent())。

希望这能有所帮助。

(我想知道为什么我的问题被否决了……啊)