如何在Delphi中调用.Net编写的DLL中的函数(Function)、过程(Procedure)

    最近因公司群发邮件程式需要给注册一段时间没有激活的用户发激活邮件
 
邮件中有注册密码 需要还原发给用户 但由于密码加密是用C# 中的TripleDES

完成 手头上又没有现成Delphi的实现 时间紧急 现翻译是来不及了

于是经过查资料反复实施 终于成功实现在Delphi中调用 C# 封装的DLL

中的方法(Function)和过程(Procedure)现把实施步骤写下

以供有需要的XDJM分享:

1、建立: DotNetFunc.cs 封装要使用的Function、Procedure。
 
2、生成密钥文件,用于给程序集强名称签名
sn -k key.snk

3、使用强名称签名,编译成类库
csc /t:library DotNetFunc.cs

4、生成类型库
tlbexp DotNetFunc.dll /out:DotNetFunc.tlb

5、注册dll
regasm DotNetFunc.dll

6、移入gac全局程序集缓存
gacutil -i DotNetFunc.dll

7、Delphi中的调用测试

uses  Variants, COMOBJ, OleCtnrs, Activex;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  SharpObject: Variant; 
  TestValue: string;
begin
  try
    try

      SharpObject := CreateOleObject('CSharpServer.SharpObject');
      TestValue := SharpObject.DecryptTripleDES(Edit1.Text);
      Edit2.Text :=TestValue;
    except
      on e: exception do
      begin
        ShowMessage(e.Message);
      end;
    end;

  finally
    SharpObject := Unassigned;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  SharpObject: Variant;
  TestValue: string;
begin
  try
    try

      SharpObject := CreateOleObject('CSharpServer.SharpObject');
      TestValue := SharpObject.EncryptTripleDES(Edit2.Text);
      Edit1.Text :=TestValue;
    except
      on e: exception do
      begin
        ShowMessage(e.Message);
      end;
    end;
  finally

    SharpObject := Unassigned;
  end;
end;


initialization
  CoInitialize(nil);

finalization
  CoUninitialize;

end.  

运行图片

转载于:https://www.cnblogs.com/yxbsmx/articles/1285640.html

本方案用提供Delphi7与.NET程序的协同开发, .NET程序开发服务端, Delphi7客户端。客户端只需实现界面、用户输入操作 及错误显示(提示),其他操作(包括对客户端数据集或者单条记录的校验都是发回到服务端进行的)都在服务端完成。服务端 支持部署在Web服务器(IIS, Webservice)或者独立服务器(可作为Windows程序独立运行或者Windows服务运行,TCP协议)。 "友一分销管理系统"是基于该框架实现的,详见"POS管理用户手册.doc",初始设置见"Readme.doc"。 一 .NET(C#)服务组件说明 .NET(C#)服务组件开发基于DotNetFrame4.0, 服务端集成Castle实现对AOP的支持。只要在项目引用BuleCommon.dll程序集, 类(Class)继承于BuleCommon.BuEntity.BuEntityObj, 并且在类和方法前指定[BuleCommon.BuEntity.BuEntityAttribute()] 特性, 实现Bule_EntityRegClass : IBule_EntityRegClass注册类完成服务组件注册即可。 服务组件类框架: using BuleCommon; using BuleCommon.BuEntity; namespace BuJxcData { [BuEntity()] //使客户端能获取该服务组件(class) public class BuIOBillValidate : BuEntityObj { [BuEntity(BuEntityMethod.bemValidate)] //使客户端能获取该服务组件单记录校验方法 public virtual bool Buf_CallCalcFields(ref BuleEntityCall EntityData, ref BuRecordSet RecordSet) { } [BuEntity(BuEntityMethod.bemValidates)]//使客户端能获取该服务组件多记录校验方法 public virtual bool Buf_RefreshPriceList(ref BuleEntityCall EntityData, ref DataSet ds) { } } [BuEntity()] //使客户端能获取该服务组件(class) public class BuCustomers : BuEntityObj { [BuEntity(BuEntityMethod.bemGetName)]//使客户端能获取该服务组件根据代码获取信息方法 public BuRecordSet Buf_GetCustData(ref BuleEntityCall EntityData) { } } [BuEntity()]//使客户端能获取该服务组件(class) public class BuStockCgInBill : BuEntityObj { [BuEntity(BuEntityMethod.bemOpen)]//使客户端能获取该服务组件打开方法 public virtual DataSet Buf_OpenBillData(ref BuleEntityCall EntityData) { } [BuEntity(BuEntityMethod.bemSave)]//使客户端能获取该服务组件保存方法 override public bool Buf_SaveBillData(ref BuleEntityCall EntityData, ref DataSet ds) { } [BuEntity(BuEntityMethod.bemAudit)]//使客户端能获取该服务组件审核方法 public bool Buf_SaveCgInAuditBill(ref BuleEntityCall EntityData, ref DataSet ds) { } } } 二. Bule VCL组件说明 1.Bu_ClientObj 用于提供模块注册信息(模块名称,子系统编号,模块编号等)及访问服务器的方法(通
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值