1.visual studuio操作
????????1.1visual Studio创建类库项目ClassLibrary1。
????????????????1.1.1ClassLibrary1项目Class1.cs内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
[ComVisible(true)]
[Guid("D8C1EAA7-C829-46EF-A42E-2C9130467DB4")]
interface IClass1
{
string Class1Property { get; set; }
[DispId(1)]
string Class1Function1();
[DispId(1)]
void Class1Function2(string message);
}
[ComVisible(true)]
[Guid("CB5F70B2-3F6C-4410-B5B8-BD9C97042396")]
[ProgId("ClassLibrary1.Class1")]//通过这个调用该COM组件
public class Class1: IClass1
{
public string Class1Property { get; set; }
public string Class1Function1()
{
Console.WriteLine($"Function1");
return "Function1Result";
}
public void Class1Function2(string message)
{
Console.WriteLine($"Function1:{message}");
}
}
}
????????1.2右键项目,左键”属性“。
? ? ? ? 1.3勾选“生成“选项卡的”为COM互操作注册“勾选框。
? ? ? ? 1.4勾选”签名“选项卡的”为程序集签名‘勾选框。
? ? ? ? 1.5”左键选择强名称密钥文件“下拉框箭头,左键”新建“。
? ? ? ? 1.6在”创建强名称密钥“弹窗中输入”密钥文件名称“文本框,取消”使用密码保护密钥文件“勾选框,左键”确定“。
????????1.7.保存工程,关闭visual studio后以管理员模式运行,打开项目,右键项目,左键”重新生成“。
2.命令提示符操作
????????2.1以管理员模式打开命令提示符(cmd),输入:
????????????????cd?C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64
????????????????gacutil -i <dll路径>
????????????????cd?C:\Windows\WinSxS\wow64_regasm_b03f5f7f11d50a3a_4.0.15912.0_none_9dcb4fe8bf21aec2
????????????????Regsm <dll路径>
????????随后即可在注册表HKEY_CLASSES_ROOT找到ProgId:ClassLibrary1.Class1。
3.调用? ? ? ? ? ? ??
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
object obj = Activator.CreateInstance(Type.GetTypeFromProgID("ClassLibrary1.Class1"));
obj.GetType().GetProperty("Class1Property").SetValue(obj,"hahaha1");
Console.WriteLine((string)obj.GetType().GetProperty("Class1Property").GetValue(obj));
Console.WriteLine((string)obj.GetType().GetMethod("Class1Function1").Invoke(obj,new object[] { }));
obj.GetType().GetMethod("Class1Function2").Invoke(obj,new object[] {"hahaha2" });
}
}
}
4.结果