Delphi 7 调用C# 编写的com组件DLL

最近需要一个功能,是C#编写的,但是DELPHI要用,C#不能生成普通的DLL,只能生成COM组件,现介绍一下基本方法:

  • 运行VS时,建议使用管理员身份运行
  • 在C#内,新建立一个C#类库

  • 示例代码,上面interface是定义,下面class是实现
  • namespace SMUtilMed
    {
        [Guid("6818FDB7-BF52-464D-A184-D430C4509433")]
        public interface IName
        {
            [DispId(1)]//为函数的标识:C#代码中必须定义了接口,才可以按照此方法实现调用。 
            string encrypt(string data, string appId, string appSecret);
            
            [DispId(2)]
            string decrypt(string data, string appId, string appSecret);
            
        }
    
        [Guid("E526C7A0-C8F7-452E-B129-C0972104C473"),//空间+类名 记录到注册表中,给其他语言创建对象用
         ProgId("SMUtilMed.SMUtil_CS"),
         ClassInterface(ClassInterfaceType.None)//加上此行,DELPHI才能 正确引入
    ]
        public class SMUtil_CS: IName
        {
            //下面是实现的具体代码
            public string encrypt(string data, string appId, string appSecret)
            {
                return SMUtil.encrypt(data, appId, appSecret);
            }
            
            public string decrypt(string data, string appId, string appSecret) 
            {
                return SMUtil.decrypt(data, appId, appSecret);
            }
            
        }
    }
    

    需要GUID的地方,使用工具->创建GUID

  • 在项目 -> 属性内,修改

  • 设置签名

  • 然后build,生成 DLL文件

  • 查找regasm.exe,一般在.net的目录下,可以直接拷拷贝到生成DLL的目录,方便操作

  • 以管理员身份,运行cmd命令窗口

  • 命令窗口内,切换到DLL所有目录

  • 运行 gacutil.exe gacutil -I XXXX.dll

  • 运行 regasm /tlb:smutilmed.tlb smutilmed.dll

  • 运行结果:

  • Microsoft .NET Framework 程序集注册实用工具版本 4.8.9037.0
    (适用于 Microsoft .NET Framework 版本 4.8.9037.0)
    版权所有 (C) Microsoft Corporation。保留所有权利。

    成功注册了类型
    成功注册了导出到“SMUtilMed\bin\Debug\smutilmed.tlb”的程序集和类型库

  • 在delphi 7内,import type Library

  • 选择注册好的COM组件

  • 可以选择Create Unit,只生成单元文件并引入项目内,不用安装元件到面板上

  • 生成的引入文件内,应该有对应的方法,如果没有,请检查C#内的各项定义

  • 使用:

  • FSMUtil_CS:TSMUtil_CS;

  • FSMUtil_CS := TSMUtil_CS.Create(nil);

  • FSMUtil_CS.sign(SignText, appSecret, PrivKey);

参考:

在vs2022环境中用C#创建COM组件 - 小林野夫 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值