title author date CreateTime categories
dotnet core 导出 COM 组件
lindexi
2019-09-22 20:25:38 +0800
2019-09-22 20:13:16 +0800
dotnet

在 dotnet core 3.0 支持将库导出为COM组件,本文告诉大家如何将代码导出为 COM 组件

在导出 COM 组件的库,需要一个 GUID 声明这个 COM 接口

例如创建一个项目,在这个项目添加一个接口,通过以下方法标记为 COM 组件

这里的 Guid 是我自己设置的,可以在 VisualStudio 工具里面找到 GUID 创建选项,创建一个随机的 GUID 字符串

    [ComVisible(true)]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IFoo
{
/// <summary>
/// 有趣方法
/// </summary>
/// <returns></returns>
string Foo();
}

上面代码就定义了一个接口,在相同的项目还需要写一个类实现这个接口

    [ComVisible(true)]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
public class Foo : IFoo
{
/// <inheritdoc />
string IFoo.Foo()
{
return "林德熙是逗比";
}
}

编辑这个项目的 csproj 添加属性 EnableComHosting 这样编译的时候才会生成可以导出为COM的文件

  <PropertyGroup>
<EnableComHosting>true</EnableComHosting>
</PropertyGroup>

现在看起来的项目文件如下

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup> <PropertyGroup>
<EnableComHosting>true</EnableComHosting>
</PropertyGroup>
</Project>

现在尝试编译这个项目,可以在输出路径里面找到 项目名.comhost.dll 文件,如创建的项目是 BearqalkeawaiKaleenemcemfo 那么在输出文件夹可以找到这个文件

BearqalkeawaiKaleenemcemfo.comhost.dll

使用管理员运行命令行,输入下面代码注册 COM 文件

regsvr32 项目名.comhost.dll

尝试创建一个新项目引用这个COM组件,使用的方法是定义一个接口

    [ComImport]
[CoClass(typeof(Foo))]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
public interface IFoo
{
/// <summary>
/// 有趣方法
/// </summary>
/// <returns></returns>
string Foo();
} [ComImport]
[Guid("5742D257-CCCC-4F7A-8191-6362609C458D")]
internal class Foo
{
}

这里定义的方法和其他使用COM的方法相同

        static void Main(string[] args)
{
var foo = new IFoo();
Console.WriteLine(foo.Foo());
}

创建接口就可以使用方法

Exposing .NET Core Components to COM | Microsoft Docs

源代码请看 github官方源代码

2019-9-22-dotnet-core-导出-COM-组件的更多相关文章

  1. dotnet core 实践——日志组件Serilog

     前几天把基于quartz.net的部分项目代码移植到了dotnet core ,但是没增加日志功能,原因是没找到合适的组件. 今天终于找到了Serilog: https://github.com/s ...

  2. dotnet core各rpc组件的性能测试

    一般rpc通讯组件都具有高性特性,因为大部分rpc都是基于二进制和连接复用的特点,相对于HTTP(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互.本文针对了dotnet core平台 ...

  3. dotnet core使用开源组件FastHttpApi进行web应用开发(转)

      FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi). ...

  4. dotnet core使用开源组件FastHttpApi进行web应用开发

    FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi).在这 ...

  5. dotnet core高吞吐Http api服务组件FastHttpApi

    简介 是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件,它并没有完全实现HTTP SERVER的所有功能,而是只实现了在APP和WEB中提供数据服 ...

  6. Net Core开源通讯组件 SmartRoute

    Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...

  7. DotNet Core 介绍

    前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...

  8. .Net Core开源通讯组件 SmartRoute(服务即集群)

    SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群.SmartRoute是通过消息订阅的机制实现 ...

  9. 解决VS2015无法调试dotnet core项目

    dotnet core 1.0正式版和VS2015 update3安装后一直无法在VS中正常调试. 错误提示:The debugger's worker process (msvsmon.exe) u ...

  10. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

随机推荐

  1. 【JZOJ4894】【NOIP2016提高A组集训第16场11.15】SJR的直线

    题目描述 数据范围 解法 考虑逐次加入每一条直线. 对于当前已加入的直线集合L,现在要新加入一条直线l. 那么它产生的贡献,与平行线有关. 对于任意三条直线,如果其中任意两条平行,那么将不做贡献. 所 ...

  2. 阿里小二的日常工作要被TA们“接管”了!

    昨天有人偷偷告诉我说 阿里巴巴其实是一家科技公司! 我想了整整一夜 究竟是谁走漏了风声 那么重点来了,阿里到底是如何在内部的办公.生活中,玩转“黑科技”的呢? AI取名:给你专属的“武侠”花名 花名是 ...

  3. js获取url制定的某个参数

    <script>function getURLParam(strParamName, url) {    var strReturn = "";    var strH ...

  4. Symmetric Tree 深度优先搜索

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  5. KiCad EDA 5.1.3 正式发布了

    KiCad EDA 是一款用于印刷电路板设计的开源自由软件,最初由法国人 Jean-Pierre Charras 于 1992 年推出1,现由 KiCad 开发团队维护. KiCad 目前支持英语.法 ...

  6. 火狐自动填写表单autofill forms的用法和注意事项

    1.安装后,打开要表单页面,右键

  7. 【转载】Ubuntu终端常用的快捷键

    Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手.在Ubuntu中打开终端的快捷键是Ctrl+Alt+T.其他的一些常用的快捷键如下: 快捷键 功能 Ta ...

  8. Flask学习之二 模板

    继续学习flask 本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/templates.html 英文原文 ...

  9. jQuery 滑动

    jQuery 滑动方法 通过 jQuery,您可以在元素上创建滑动效果. jQuery 拥有以下滑动方法: slideDown() slideUp() slideToggle() jQuery sli ...

  10. Hbase数据模型物理视图