链接c#gui项目和库dll项目
这段代码是一个类似helloworld的示例,说明了我试图实现的框架目标。该项目的目标是从C#或VBA中的一段独立代码控制GUI,例如与设备和其他软件对话的自动化例程。GUI的存在是为了让用户不使用自动化,但我也希望自动化GUI的各个部分,就像有人在那里一样 我试图将GUI和COM 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调用的函数 我认为这就像添加其他项
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。你对更好的建筑有什么想法吗?