Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#gui项目和库dll项目_C#_.net_Visual Studio_User Interface - Fatal编程技术网

链接c#gui项目和库dll项目

链接c#gui项目和库dll项目,c#,.net,visual-studio,user-interface,C#,.net,Visual Studio,User Interface,这段代码是一个类似helloworld的示例,说明了我试图实现的框架目标。该项目的目标是从C#或VBA中的一段独立代码控制GUI,例如与设备和其他软件对话的自动化例程。GUI的存在是为了让用户不使用自动化,但我也希望自动化GUI的各个部分,就像有人在那里一样 我试图将GUI和COM dll链接在一起,如上所述,但没有多大成功 这两个项目分别工作 我已经验证了我可以调用COM dll函数 我还验证了简单GUI的工作原理 现在,我希望在GUI中有可以从COM dll调用的函数 我认为这就像添加其他项

这段代码是一个类似helloworld的示例,说明了我试图实现的框架目标。该项目的目标是从C#或VBA中的一段独立代码控制GUI,例如与设备和其他软件对话的自动化例程。GUI的存在是为了让用户不使用自动化,但我也希望自动化GUI的各个部分,就像有人在那里一样

我试图将GUI和COM dll链接在一起,如上所述,但没有多大成功

这两个项目分别工作

  • 我已经验证了我可以调用COM dll函数

  • 我还验证了简单GUI的工作原理

  • 现在,我希望在GUI中有可以从COM dll调用的函数

  • 我认为这就像添加其他项目和添加引用一样简单,但我做错了什么。这很有趣,因为代码的完成让我看起来非常接近,你可以从截图中看到

    图形用户界面项目:

    namespace GUI_HELLOWORLD
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            public void Button1_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Hello World.");
            }
            public void Button1_Click()
            {
                //For the sake of clicking through code - figure out correct method later
                MessageBox.Show("Hello World.");
            }
        }
     }
    
    DLL项目:

    namespace GUI_COM_LIB
    {
        [System.Runtime.InteropServices.ComVisible(true)] //- may not be necessary in some cases?
        public class ZZ_GUI_HELLOWORLD_API_DEMO
        {
            public void SelHello()
            {
                GUI_HELLOWORLD.MainWindow.Button1_Click(); // ERROR!
            }
    
    当在COM_LIB dll项目中添加对GUI的引用时,我可以在弹出菜单中看到GUI,所以它看到它就在那里!但是,当我键入
    GUI\u HELLOWORLD.MainWindow.
    时,在我希望看到按钮1\u Click()的地方不会出现任何公共函数


    使用COM组件从来没有这么简单。 你看过这本古书了吗

    具体来说,您是否在COM组件上运行了TLBIMP

    编辑

    看看这个


    您的客户端是否构建为Excel加载项?(使用Visual Studio Tools for Office)

    您需要窗口对象的实例:

    public void SelHello()
    {
        var myWindow = new GUI_HELLOWORLD.MainWindow();
        myWindow.Button1_Click();
    }
    


    我在这个线程中找到了解决方案。通过使用通道系统,可以创建一个接口,并且可以将GUI中的函数通过管道传输到dll。然后可以从C#、Excel VBA或其他.NET调用dll。

    为C#GUI提供Excel VBA API的任何其他方法?当然。你的C#GUI是Excel外接程序吗?嗯,我可能不得不继续研究这个问题,目前它还不是外接程序。我目前的问题是,我有一个工作的GUI和一个可以从excel调用的工作的C#COM库。我需要GUI的各个部分也可以调用excel。也许我误解了。这似乎是两个互相通信的.NET项目。看起来他已经从COM组件生成了程序集,但是在看了第二眼屏幕截图后,他的参考是他的作品。它会生成一个弹出窗口,如果我点击按钮1就会出现这个弹出窗口。然而,这并不是我想要的。我想单击已经打开的GUI中的按钮。我仔细查看了你的屏幕截图,你确定你的参考资料正确吗?您的库正在引用GUI项目。假设您已经为COM组件生成了一个程序集(看起来您已经生成了),您将添加对GUI项目的引用,并将该引用指向COM程序集。关于上面的最终屏幕截图,Wes所说的似乎是正确的。您尚未构建“主窗口”来调用按钮单击。“Button\u Click”在MainWindow类中作为Click处理程序存在,但为什么要尝试从类库中引用此处理程序?也许如果我能更好地理解你的目标,我就能找到一条清晰的解决之路。我个人不会以这种方式设计解决方案,因此如果没有更多的上下文,我真的无法提供更多帮助。这对我来说有点陌生。我绝对相信我的推荐信是对的。我想从另一个程序调用GUI的元素。所以我必须在另一个程序中引用GUI项目。韦斯所说的正是问题的根源。他的解决方案用于创建一个新窗口,但我想访问已经打开的窗口,而不是新创建的GUI。你对更好的建筑有什么想法吗?