前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dotnet core 导出 COM 组件

dotnet core 导出 COM 组件

作者头像
林德熙
发布2019-09-27 10:22:17
9100
发布2019-09-27 10:22:17
举报
文章被收录于专栏:林德熙的博客林德熙的博客

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

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

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

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

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

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

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

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

代码语言:javascript
复制
  <PropertyGroup>
    <EnableComHosting>true</EnableComHosting>
  </PropertyGroup>

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

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Library</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

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

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

代码语言:javascript
复制
BearqalkeawaiKaleenemcemfo.comhost.dll

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

代码语言:javascript
复制
regsvr32 项目名.comhost.dll

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

代码语言:javascript
复制
    [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的方法相同

代码语言:javascript
复制
        static void Main(string[] args)
        {
            var foo = new IFoo();
            Console.WriteLine(foo.Foo());
        }

创建接口就可以使用方法

[Exposing .NET Core Components to COM

Microsoft Docs](https://docs.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com )

源代码请看 github官方源代码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档