C# visual studio COM创建及调用

2024-01-02 12:57:24

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.结果

文章来源:https://blog.csdn.net/Cecile0828/article/details/135335108
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。