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,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...
随机推荐
- js 全角与半角互转
///全角空格为12288,半角空格为32 ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 //半角转换为全角函数 function ...
- Directx11教程(47) alpha blend(4)-雾的实现
原文:Directx11教程(47) alpha blend(4)-雾的实现 除了用来实现透明效果之外,我们还可以用alpha blend来实现雾(fog)的效果.通过逐渐清晰的雾气效果,可 ...
- 接口测试 Postman 做接口自动化测试_入门篇
可能是目前最好用的web接口调试工具 无需注册(注册后可多终端同步用例) 免费(每年付费$60可用云服务,30天免费试用) 保存历史记录 支持录制请求 基于Chrome的V8引擎,支持JS脚本(基本支 ...
- oracle-ORA-01567错误
删除日志4时将在线索1中保留少于两个日志文件
- pl/sql基础知识—定义并使用变量
n 介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...
- 发布网站时 遇到XX类型 同时存在XX.dll和XX.dll中
遇到该问题的可能如下: 1.复制了页面 更改了名字 可是对应的一些地方没有注意 <%@ Page Language="C#" AutoEventWireup="tr ...
- 【Django入坑之路】admin组件
1:settings.py 中的 INSTALLED_APPS # Application definition INSTALLED_APPS = [ 'django.contrib.admin', ...
- MUI - 解决动态列表页图片懒加载再次加载不成功的bug
首先描述一下功能 实现列表页动态加载 通过官方提供的"下拉刷新和上拉刷新"及"图片懒加载"示例实现. http://www.cnblogs.com/philly ...
- Python traceback模块简单使用
Python中的traceback模块被用于跟踪异常返回信息,可以在logging中记录下traceback. traceback.format_exc() 获取异常为字符串,保存到日志文件 try: ...
- 微信服务号获得openid 跟用户信息
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxx&redirect_uri=http://www. ...