这个片段是一个类似helloworld的例子,说明了我想要实现的框架目标。该项目的目标是从C#或VBA中的单独代码段控制GUI,例如:与设备和其他软件对话的自动化程序。 GUI是为了不使用自动化的用户的利益,但我也希望自动化GUI的各个部分,就像有人在那里一样
我正在尝试将GUI和COM dll链接在一起,如上所述,但没有取得多大成功。
两个项目分开工作。
我已经确认我可以调用COM dll函数。
我还验证了简单的GUI工作原理。
现在我想在GUI中拥有可从COM dll调用的函数。
我认为这就像添加其他项目并添加引用一样简单,但我做错了。它很有趣,因为代码完成使它看起来非常接近,正如您从屏幕截图中看到的那样。
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()
答案 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。