创建可执行 COM 作为 ATL 项目并在 C# 中使用它

Posted

技术标签:

【中文标题】创建可执行 COM 作为 ATL 项目并在 C# 中使用它【英文标题】:Creating executable COM as ATL project and use it in C# 【发布时间】:2017-06-24 10:58:47 【问题描述】:

尝试在可执行文件中创建 COM 对象并在 C# 项目中使用它:

在可执行文件中创建 COM。

使用 ATL 项目创建

添加类:

编译和运行没有问题。

尝试在 C# 项目中使用并失败。 项目自行注册...失败。可能有什么问题? VS 以管理员身份启动。

【问题讨论】:

工具箱需要一个 ActiveX 控件,没有任何迹象表明您实际创建了一个。好吧,你没有,它不可能是一个 EXE 项目,并且“ATL 简单对象向导”不会创建一个。这并不简单。改用 Project > Add Reference,代码中的 new 语句。我也非常,非常强烈建议您不要创建 EXE 服务器,当您从托管代码中使用它们时,它们有许多非常锋利的边缘,当 COM 不存在时,它们总是会导致大量出血很好理解。 【参考方案1】:

您应该在 C# 项目中添加对服务器类型库的引用才能使用它:

    在解决方案资源管理器中右键单击References,然后单击Add a reference 在引用管理器中选择 COM。 选择您的类型类型库(在您的示例中为 ComTstLib) 在“解决方案资源管理器”中,打开刚刚添加的引用的快捷菜单,然后选择“属性”。在“属性”窗口中,确保将“嵌入互操作类型”属性设置为 True。这会导致 Visual Studio 在您的可执行文件中嵌入 COM 类型的类型信息,从而无需将主互操作程序集与您的应用一起部署。

在部署时,您只需要确保您的 com 服务器已经安装在客户端机器上。

另见msdn

【讨论】:

以上是关于创建可执行 COM 作为 ATL 项目并在 C# 中使用它的主要内容,如果未能解决你的问题,请参考以下文章

向 VBScript (ATL) 公开 COM 事件

将 C++ ATL 可执行应用程序从 VS2003 迁移到 VS2013

如何使用VC ++中的Atl / Com项目通过outlook添加ins,将选定的收件箱邮件作为附件发送

ATL/COM : 在 IDL 文件中我们可以创建一个可以用作返回类型的类

如何使用原生 C++ 的 COM 实现 C# 的接口?

javascript 的 ATL COM 事件