(60)c# com com+ dcom
一、创建COM组件
1.创建项目
2.设置使程序集可见
AssemblyInfo.cs中flase改为ture
或者
项目属性
设置可见
3.Guid生成器
在开始程序下能够找到Guid生成器
每次都能产生一个全球唯一的COM组件标识符,
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复
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.互操作
项目属性-生成
勾选
公开一个允许 COM 对象与托管应用程序进行交互的 COM 对象
5.签名
为了使生成的COM可以在注册表示注册,需要进行强名称签名
项目属性-签名-为程序集签名-新建
不勾选使用密码
项目下会生成一个.snk文件
用管理员身份运行项目,会自动注册
不使用管理会报错
编译后注册表下会生成
并且程序下会生成tlb文件
https://docs.microsoft.com/zh-cn/dotnet/standard/assembly/sign-strong-name
在VS里引用COM的时候就会发现多出了个ClassLibrary1
6.注册组件
将生成的DLL复制到d盘根目录
用管理员启动cmd
进入对应的.net目录
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
注册
RegAsm D:\ClassLibrary1.dll /tlb:ClassLibrary1.tlb /codebase
7.调用
(1)C#好像无法用COM引入C#编写的库,需要用加载程序集的方式????