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

时间:2014-10-24 00:42:34

标签: c# .net visual-studio user-interface

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

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

两个项目分开工作。

  1. 我已经确认我可以调用COM dll函数。

  2. 我还验证了简单的GUI工作原理。

  3. 现在我想在GUI中拥有可从COM dll调用的函数。

  4. 我认为这就像添加其他项目并添加引用一样简单,但我做错了。它很有趣,因为代码完成使它看起来非常接近,正如您从屏幕截图中看到的那样。

    enter image description here

    GUI项目:

    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_HELLOWORLD.MainWindow.时,没有任何公共函数出现在我希望看到Button1_Click()

    的地方

    enter image description here

3 个答案:

答案 0 :(得分:0)

使用COM组件从未如此简单。 你看过这本古老的书吗?

Calling COM Components from .NET Clients

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

修改

查看此Stack Overflow question This Blog Post

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

答案 1 :(得分:0)

您需要一个窗口对象的实例:

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

答案 2 :(得分:0)

WCF named pipe minimal example

我在这个帖子中找到了解决方案。通过使用通道系统,可以创建界面,并且可以将来自GUI的功能连接到dll。然后可以从C#,Excel VBA或其他.NET调用dll。