最近因公司群发邮件程式需要给注册一段时间没有激活的用户发激活邮件
邮件中有注册密码 需要还原发给用户 但由于密码加密是用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.
分享到:
相关推荐
4. **PInvoke和stdcall约定**:在Delphi中,通常使用PInvoke(Platform Invoke)来调用DLL函数。PInvoke是一种机制,使得托管代码(如Delphi)可以调用非托管代码(如C语言编写的DLL)。DLL函数通常使用stdcall调用...
1. **导入DLL**:首先,在项目中引入`System.LoadLibrary`和`System.GetProcAddress`这两个函数,用于加载和获取DLL函数地址。 2. **声明DLL接口**:在新项目的接口部分,声明DLL中的函数,与`MyDllInterfaces`单元...
2. **声明 DLL 函数**:在 Delphi 的单元文件中,使用 `external` 关键字声明从 DLL 中调用的函数。例如: ```pascal procedure YourFunction(param1: Integer); stdcall; external 'ClassLibrary1.dll'; ``` 3...
由于Delphi和C++在数据类型定义上存在差异,因此在调用DLL函数时要注意类型转换。例如,C++中的`wchar_t`在Delphi中通常对应`WideString`类型。 #### 3.3 错误处理 在实际应用中,可能遇到DLL找不到、函数地址无效...
在跨平台的软件开发中,有时我们需要将不同编程语言编写的组件集成在一起,例如使用Qt(C++)或Visual C++(VC)调用由Delphi编译的DLL库。Delphi以其强大的面向对象特性及易用性,在创建高效、快速的Windows应用...
在调用DLL函数时,一定要考虑到可能出现的错误情况,如DLL加载失败、函数找不到、参数不匹配等。通过异常处理机制来捕获和处理这些错误。 6. **数据类型转换:** LabVIEW和Delphi的数据类型可能不完全对应,因此...
下面将详细阐述Delphi7中调用DLL的几种常见方法。 1. **LoadLibrary 和 FreeLibrary** - `LoadLibrary` 是 Windows API 中的一个函数,用于加载指定的 DLL 文件,并返回一个句柄,表示 DLL 在进程中的实例。 - `...
本篇将详细介绍如何在Delphi XE10.3中创建静态DLL以及如何从其他Delphi应用程序中调用这些DLL。 首先,我们要理解什么是静态DLL。与常规的动态DLL不同,静态DLL并不是在运行时由操作系统加载,而是将其代码和数据...
// 调用DLL函数 MyFunction(PChar('你好,DLL!')); end else ShowMessage('无法找到DLL中的函数'); FreeLibrary(MyDLLHandle); end else ShowMessage('无法加载DLL'); ``` 5. 在适当的地方调用`MyFunction`...
在调用DLL中的函数或过程时,必须使用`stdcall`参数。这是因为大多数DLL都使用`stdcall`调用约定,它负责清理堆栈。如果不使用`stdcall`,可能会导致内存泄漏或其他不可预料的行为。 ##### 2. 使用`external`语句...
标题 "Delphi调用C#DLL.rar" 涉及的核心技术是跨语言互操作,具体来说,就是如何在Delphi环境下调用由C#编写的动态链接库(DLL)。这个压缩包包含了实现这一功能所需的全部组件和指导文档。 1. **C# DLL**:C#是一...
通达信DLL函数编程主要涉及的是在Delphi环境下开发用于通达信软件的动态链接库(DLL)指标公式。Delphi是一种强大的面向对象的编程语言,以其高效的代码生成和直观的集成开发环境(IDE)而受到程序员的青睐。在金融...
6. **Delphi调用DLL**: - 在Delphi中,导入DLL函数后,可以直接像调用本地函数一样调用DLL中的函数,确保参数类型匹配。 - 调用时需注意错误处理,因为DLL函数可能抛出异常或返回错误值。 总结来说,"Delphi ...
3. **调用DLL函数**:通过函数指针调用DLL中的函数。记得根据函数的调用约定正确地传递参数。 4. **释放资源**:当你完成DLL的使用,记得使用`FreeLibrary`函数释放模块句柄,以避免资源泄露。 在Delphi 10.2中,...
在Delphi编程环境中,...4. 在需要的地方调用DLL函数。 注意,使用DLL时要考虑兼容性问题,如API版本、平台差异等。此外,为了确保程序的稳定性,需要正确处理可能出现的错误,如DLL加载失败、找不到导出函数等问题。
调用DLL时,可以使用Delphi的`GetProcAddress`函数或者在单元中直接导入导出函数。 最后,服务程序(Service Program)是在后台运行的应用程序,不受用户界面的直接影响。在Windows系统中,服务通常用于长期运行的...
本篇文章将深入探讨如何在Delphi中调用DLL中的窗体,并以"Project"和"dll"这两个文件夹中的示例为参考。 首先,我们来理解DLL的工作原理。DLL文件包含了可执行代码和数据,这些资源可以在运行时被多个程序加载和...
在.NET框架中,C#作为主要的编程语言,有时候需要调用非托管代码,比如由Delphi编译的DLL动态链接库。本实例将详细解释如何在C#中调用Delphi编写的DLL,并提供相应的代码示例。 首先,我们需要了解Delphi DLL的基本...
在IT行业中,跨语言通信是常见的需求,本案例聚焦于如何使用Delphi 7静态或动态地调用由VS2019中的C#编译的非托管DLL,并将其整合到DLL项目中。非托管DLL是指不依赖.NET Framework运行时环境的DLL,这使得它可以在不...
在Delphi 7中,DLL(动态...3. 导出DLL函数以便主程序调用。 4. 在主程序中实现回调接口,并在需要时加载DLL,传递回调函数。 通过这种方式,可以实现DLL与主程序之间的通信,灵活地在两者之间传递数据和控制流程。