如何在C#中为桌面应用程序创建一个ActiveX组件

4

我需要为一个加载它们作为ActiveX组件的应用程序创建一个带有图形用户界面的插件(遗留系统的乐趣)。我已经进行了一些谷歌搜索,但是虽然我可以找到多个创建Web页面的ActiveX组件的示例,但我找不到桌面等效的示例。

2个回答

2

这个问题有点老了,但是...我正在寻找解决同样问题的答案。也就是说,我正试图编写一个驱动程序,通过ActiveX控件与旧应用程序连接起来。最后一次努力时,我在msdn上漫步,发现了“全能代码框架”的链接。在数十个示例中,有一个适用于CSActiveX的样本。它回答了我很多的问题,所以我想分享一下。

关于这个示例的一个注释,它需要一个预先构建的事件,所以确保纠正它指向你的rc.exe的副本。无论如何,我需要为vs2010进行更改。


1
你应该从一个新的Windows Forms控件库项目开始。
在项目属性对话框中,找到应用程序部分,点击[程序集信息…]。
然后你会看到一个复选框:使程序集COM可见。勾选此选项。
这相当于拥有了
[assembly: ComVisible(true)]

在 AssemblyInfo.cs 中,所有(公共的)用户控件都应该可以在 VB6 项目中访问。
我没有预料到会有这么多问题,就像这里所讨论的一样。
主要问题似乎是:对于 .net-dlls,regsvr32 是无用的。你应该使用 regasm.exe。

当我在一个空项目上执行此操作时,会收到警告:“C:...\AAAAAxNetTest.dll”不包含任何可以取消注册用于COM互操作的类型。 - Dan Is Fiddling By Firelight
“otherwise empty” 是什么意思?至少应包含一个控件。也许您重命名了其中一个包含的控件?因为我知道,每个控件都将为自己注册。最后一个问题:您能在旧系统中看到您的COM控件吗? - ralf.w.
我的意思是它有一个名为UserControl1的类,该类是与项目一起创建的,但是这个类在ActiveX控件测试容器(一个来自旧版本VS的调试工具,可以找到从其他地方找到的演示项目构建的控件)的可导入控件列表中没有显示出来。 - Dan Is Fiddling By Firelight
我认为这里有更多有用的指针: https://dev59.com/tkrSa4cB1Zd3GeqPUCo8 - ralf.w.
现在看起来我的问题似乎是项目级别的,因为当我从一个成功注册com的示例项目中添加一个类时,仍然会收到警告。 - Dan Is Fiddling By Firelight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接