【发布时间】:2014-12-19 19:29:27
【问题描述】:
这个 sn-p 是一个类似于 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() 的公共函数
【问题讨论】:
-
我仔细查看了您的屏幕截图,您确定您的参考资料正确吗?您的库正在引用您的 GUI 项目。 假设您已经为您的 COM 组件生成了一个程序集(看起来您已经有了),您将添加对您的 GUI 项目的引用并将该引用指向 COM 程序集。
-
关于你上面的最终截图,韦斯所说的似乎是正确的。您尚未构建“MainWindow”以调用按钮单击。 “Button_Click”作为您的 MainWindow 类中的单击处理程序存在,但您为什么要尝试从您的类库中引用此处理程序?也许如果我能更好地理解你的目标,我就能找到一条清晰的解决方案。我不会以这种方式亲自设计解决方案,所以如果没有更多的上下文,我真的无法提供更多帮助。对我来说有点陌生。
-
我绝对确定我的参考资料是正确的。我想从另一个程序中调用 GUI 的元素。所以我必须在其他程序中引用 GUI 项目。韦斯所说的是解决根本问题。他的解决方案适用于创建一个新窗口,但我想访问已经打开的窗口,而不是新创建的 GUI。对更好的架构有什么想法吗?
标签: c# .net visual-studio user-interface