2019-9-22-dotnet-core-导出-COM-组件
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());
}
创建接口就可以使用方法
2019-9-22-dotnet-core-导出-COM-组件的更多相关文章
- dotnet core 实践——日志组件Serilog
前几天把基于quartz.net的部分项目代码移植到了dotnet core ,但是没增加日志功能,原因是没找到合适的组件. 今天终于找到了Serilog: https://github.com/s ...
- dotnet core各rpc组件的性能测试
一般rpc通讯组件都具有高性特性,因为大部分rpc都是基于二进制和连接复用的特点,相对于HTTP(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互.本文针对了dotnet core平台 ...
- dotnet core使用开源组件FastHttpApi进行web应用开发(转)
FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi). ...
- dotnet core使用开源组件FastHttpApi进行web应用开发
FastHttpApi相对于asp.net mvc来说有着更轻量和性能上的优势,性能上面就不在这里介绍了(具体可查看 https://github.com/IKende/FastHttpApi).在这 ...
- dotnet core高吞吐Http api服务组件FastHttpApi
简介 是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件,它并没有完全实现HTTP SERVER的所有功能,而是只实现了在APP和WEB中提供数据服 ...
- Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...
- DotNet Core 介绍
前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...
- .Net Core开源通讯组件 SmartRoute(服务即集群)
SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置即可实现服务通讯集群.SmartRoute是通过消息订阅的机制实现 ...
- 解决VS2015无法调试dotnet core项目
dotnet core 1.0正式版和VS2015 update3安装后一直无法在VS中正常调试. 错误提示:The debugger's worker process (msvsmon.exe) u ...
- 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...
随机推荐
- 【怪物】KMP畸形变种——扩展KMP
问题 参考51nod1304这道题: 很显然我们要求的是S的每个后缀与S的最长公共前缀的长度之和. 暴力 假设我们把next[i]表示为第i个后缀与S的最长公共前缀的长度. 现在我们想了:这个next ...
- 帮助你构建云服务的开源平台:openstack
from:http://os.51cto.com/art/201205/336386_all.htm 概念架构 3-5 OpenStack Compute服务架构 点评:从openstack的能力来看 ...
- Activity基本类分析
先上一张类图. Android源码分析的文章在网络上已经很多, 有些知识点阅读完之后能够基本理解其框架,但是由于不是这些代码的维护者,所以过一段时间后就忘记的差不多了,又需要反复学习. 所以在读完文章 ...
- 洛谷P1879 玉米田
题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他 ...
- JavaScript实现,控制一个文本框只能输入正整数,如输入不符合条件则文本框全部字体标红
腾讯2014年研发职位笔试题Web前端方向简单题第一题. 代码: <html> <head> <title>test JavaScript</title> ...
- redis 如何查看版本
./redis-cli -h 127.0.0.1 info | grep 'redis_version' redis-server -v
- 国外最受欢迎的十大社交APP网站
国外最受欢迎的十大社交APP网站 2016-11-01 09:34悠悠国外网 有哪些好的国外社交软件你知道吗,想使用国外流行的社交应用来体验不一样的社交么,想和外国友人交朋友么.本期悠悠国外网 ...
- HTML之CSS标签
1.CSS选择器 1).id选择器 2).class选择器 3).标签选择器 4).层级选择器(空格) (1)id层级选择器 (2)class层级选择器 5).组合选择器(逗 ...
- 四.使用JDBC进行批处理操作
1 create table testbatch 2 ( 3 id int primary key, 4 name varchar(20) 5 ); 在实际的项目开发中,有时候需要向数据库发送一批SQ ...
- 破解fireworks_cs6、phoneshop_cs6、dreamweaver_cs6
我的Adobe密码是绿尘枫加**0,首字母大写,在我的百度云盘有这三款软件的补丁,这三款软件安装和破解的方式都一样.先下载正常安装好正版软件>正常试用一遍之后,fireworks的补丁装错了文件 ...