Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VBA和WPF dll之间传递数据_C#_Wpf_Excel_Vba_Dll - Fatal编程技术网

C# 在VBA和WPF dll之间传递数据

C# 在VBA和WPF dll之间传递数据,c#,wpf,excel,vba,dll,C#,Wpf,Excel,Vba,Dll,我已经从WPF应用程序中创建了一个DLL,并将其导入Access/VBA项目 我使用这些命令在我的DLL上创建对象的实例,并打开包含该实例的新窗口: Dim tst As New DllName.ClassName tst.ShowDialog 这工作正常:我的窗口被正确创建和显示。我的下一个目标是从创建的窗口打开VBA窗口 我会更具体一些:我的WPF-DLL上有一个按钮,我想打开一个访问表单 问题是:这可能吗 谢谢大家! 我自己就这样解决了: 我的c#类内部有一个按钮(WPF)包含:

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

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

Dim tst As New DllName.ClassName
    tst.ShowDialog
这工作正常:我的窗口被正确创建和显示。我的下一个目标是从创建的窗口打开VBA窗口

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

问题是:这可能吗


谢谢大家!

我自己就这样解决了:

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

代表声明:

public delegate void MyEventHandler();
事件接口:

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("***your-guid***")]
public interface _DllAppEvents
{
    [DispId(1)]
    void MyEvent();
}
My window类,该类不能实现接口,并且包含My button:

[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())

希望这能有所帮助

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