用GUI制作COM服务器的最佳实践是什么?



上下文

我正在使用一些旧的机器人软件,如果实现了一些预定义的接口,可以从com对象获取信息。由于该旧软件在Windows 2000上运行,因此我想使用DCOM来(尝试(避免为Windows 2000编译某些内容。(我知道必须称为的程序可能需要工作,或者至少必须存在,或在Windows 2000计算机上(

另一台计算机将通过DCOM调用,并将使用配置的一组步骤处理图像。我希望GUI显示出传入和传出的图像以及更改其执行步骤的能力。


问题

图像处理器需要实现两个接口,但是Interface1和Form一样包含Load函数,但是两者都需要保持可访问,以便我认为我可以使用new关键字。因此,以下代码将不起作用。

public class ServerForm : Form, Interface1, Interface2 { }

我可以这样拆分:

public class ServerForm : Form { }
public class MyImageProcessor : Interface1, Interface2 { }

,但我仍然需要从MyimageProcessor类访问表格。我尝试通过这样的构造函数将表格传递给MyimageProcessor:

static class Program {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            ServerForm sv = new ServerForm();
            MyImageProcessor mip = new MyImageProcessor(sv);
            Application.Run(sv);
        }
    } 

但是,当我使用 regasm CSharpServer.exe /regfile:CSharpServer.reg时,检查添加了哪些键,仅显示服务器形式而不是imageProcessor。

如何解决此问题?

此解决方案修复了上述两个问题:两个load功能都将保持可用,并且生成了正确的注册表键,但是如果它会在以后给COM的任何问题,我不会然而。(可能会(

我已经将其分为两个类。该服务器形式是生成并从MyImageProcessor的构造函数运行的。

public class MyImageProcessor : Interface1, Interface2{
    private static ServerForm sv;      
    public MyImageProcessor () {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        sv = new ServerForm();
        Application.Run(sv);
    }
}

public class ServerForm : Form {
        public ServerForm() {
            InitializeComponent();
        }
}

我想强调的是,这解决了现在的问题,如果我让一切正常,我会尝试更新此帖子。

相关内容

最新更新