最近需要一个功能,是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);
参考:

3626

被折叠的 条评论
为什么被折叠?



