最近因公司群发邮件程式需要给注册一段时间没有激活的用户发激活邮件
 
邮件中有注册密码 需要还原发给用户 但由于密码加密是用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.  

运行图片

posted on 2008-09-06 15:18  yxbsmx  阅读(372)  评论(0编辑  收藏  举报