在Delphi中调用.Net编写的DLL中的函数

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

时间: 2024-08-09 22:15:23

在Delphi中调用.Net编写的DLL中的函数的相关文章

怎样在MFC中调用C#编写的DLL

一.使用 /clr 编译 MFC 可执行文件或规则 DLL 1.打开"项目属性"对话框,方法是右键单击"解决方案资源管理器"中的项目并选择"属性". 2.展开"配置属性"旁边的节点并选择"常规".在右侧窗格中的"项目默认值"下,将"公共语言运行库支持"设置为"公共语言运行库支持 (/clr)". 3.在相同的窗格中,确保将"MFC 的使用

怎样在C#中调用Delphi6写的DLL

我在编写一个系统时遇到了一个问题,无法在C#中调用Delphi6写的DLL,只因为DLL的参数是string类型的.然后在网上找相关的资料,还是没有结果.经过我的再三琢磨,现在已经解决,特写此文章与大家分享我的喜愉!Dellphi DLL文件:///////////////////////////////////////////////////////////////////library mydll; uses SysUtils, Classes; {$R *.res}function Out

如何在NodeJS中调用SS生成的DLL

要想在NodeJS中调用SS生成的DLL, 需要借助EdgeJS. EdgeJS: http://tjanczuk.github.io/edge/ 如果你还不知道如何在SS 中生成DLL, 请查看: Spider Studio 新版本 (x-mas) - 可以引入第三方程序集, 可以将脚本生成为DLL 下面以曾经写过的XML/JSON互转的脚本为例 (C#中 另辟蹊径解决JSON / XML互转的问题) 说明如何在NodeJS中应用SS DLL: 1. 安装edgejs npm install

c++-用vb.net(或C#)调用C++编写的DLL时遇到的问题

问题描述 用vb.net(或C#)调用C++编写的DLL时遇到的问题 这部分是在c++中可以正常工作的部分,其声明如下: extern "C" int LHD_Main(unsigned char *pImage, RECT *rcRoi,int w, int h, char *PlateCharacters, RECT *rectPlateLocation, int *PlateReliability, int nMod); 调用如下 //加载图片 IplImage *image =

c#调用c++编写的dll总是出现问题,哪位高手帮帮忙

问题描述 我的这个程序,使用c#调用c++编写的dll,总是出现以下这个问题,那位高手能够帮帮忙,小女子在此先感谢了.大家就救我吧.c++编写的dll中的函数voidEFSgetUsrThesaurus(pUsrDicFileNameTableDicFlNmTbl,pUsrKeyWordTableKeyWdTbl,pUsrThesaurusTableThTbl,EFSDICSTATUS*EFS_dicstatus);c++中的结构体typedefstruct{intCnt;struct{char

c++-C#调用C++动态库DLL中的函数

问题描述 C#调用C++动态库DLL中的函数 C#调用C++动态库DLL中的函数,此函数参数中有bool(小写)类型的参数.c#该如何进行转换 解决方案 C#调用C++动态库dllC#调用C++动态库(dll)C#动态调用C++编写的DLL函数 解决方案二: bool类型的true 或false一般对应1和0.有的语言没有bool类型的.传递参数时可用整型替代. 解决方案三: public static extern int RD_CloseCom(bool IsOpen); 解决方案四: 在C

mfc-LabView中调用MFC-Wizard生成的DLL实现自定义文件对话框功能出错

问题描述 LabView中调用MFC-Wizard生成的DLL实现自定义文件对话框功能出错 VC创建MFC-Wizard生成的Dll,在导出函数MyFileOpen中调用由CFileDialog派生类CMyFileDlg实现自定义文件对话框.再在LabView中引用库函数节点调用MFC生成的DLL,输入输出参数设置输入类型int32.输出为C字符串指针即为文件对话框返回的选中目标文件路径. 如上配置完成后,运行弹出1097错误,用error_out屏蔽后,返回路径没有输出结果.DLL调试执行My

动态链接库-在VS中调用已存在的DLL,隐式链接和显示连接都编译不通过

问题描述 在VS中调用已存在的DLL,隐式链接和显示连接都编译不通过 新建一个Win32控制台应用程序,想在其中调用MyDll中的函数. 采用隐式配置方案时,出现MyDll.lib找不到,无法打开!!! 采用显示的#pragma comment(lib,"MyDll.lib") #include #pragma comment(lib,"G://My programDynamicLibraryDebug__ltp_dll.lib") //#include "

C#调用C++编写的dll里面的导出类

问题描述 C#调用C++编写的dll里面的导出类,dll里面的一个类都是虚函数,怎么破,求抱大腿~~~~~~ 解决方案 解决方案二:C++和C#虚函数是一样的道理