一、创建COM组件

 1.创建项目

(60)c#  com com+ dcom_程序集

 

2.设置使程序集可见

AssemblyInfo.cs中flase改为ture 

(60)c#  com com+ dcom_程序集_02

 

 或者

项目属性

(60)c#  com com+ dcom_生成器_03

 

设置可见

 

(60)c#  com com+ dcom_程序集_04

 

3.Guid生成器

在开始程序下能够找到Guid生成器

每次都能产生一个全球唯一的COM组件标识符,

GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复

(60)c#  com com+ dcom_程序集_05

 

 

(60)c#  com com+ dcom_microsoft_06

 

 

4.编写程序

using System;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
public class Class1
{
[Guid("7C54E43E-974E-40ab-8E01-354E0E0ADE92")]//
public interface ICom
{
[DispId(1)]//接口生成标志 1是自己编得号不能重复
double Add(double x, double y);
}

[Guid("82DA7555-9338-40f7-87B2-344574BE361B")]
public class Com:ICom
{
public double Add(double x, double y)
{
return x + y;
}
}
}
}

 

4.互操作

项目属性-生成

勾选

(60)c#  com com+ dcom_程序集_07

 

公开一个允许 COM 对象与托管应用程序进行交互的 COM 对象

 ​​https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/w29wacsy(v=vs.100)?redirectedfrom=MSDN​

 

5.签名

为了使生成的COM可以在注册表示注册,需要进行强名称签名

项目属性-签名-为程序集签名-新建

(60)c#  com com+ dcom_程序集_08

 

 不勾选使用密码

项目下会生成一个.snk文件

(60)c#  com com+ dcom_生成器_09

用管理员身份运行项目,会自动注册

不使用管理会报错

(60)c#  com com+ dcom_生成器_10

 

 编译后注册表下会生成

(60)c#  com com+ dcom_microsoft_11

并且程序下会生成tlb文件

 

(60)c#  com com+ dcom_生成器_12

 ​​https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/sign-strong-name​

在VS里引用COM的时候就会发现多出了个ClassLibrary1

(60)c#  com com+ dcom_程序集_13

 
6.注册组件

将生成的DLL复制到d盘根目录

用管理员启动cmd

进入对应的.net目录

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

注册

RegAsm D:\ClassLibrary1.dll /tlb:ClassLibrary1.tlb /codebase

 

(60)c#  com com+ dcom_程序集_14

 

 

7.调用

(1)C#好像无法用COM引入C#编写的库,需要用加载程序集的方式????

(60)c#  com com+ dcom_程序集_15