Delphi调用.net动态链接库DLL(非com,自动生成接口)
常见的.NET有C#、 http:// VB.NET 等。随机微软的持续发力,.NET的市场份额越来越大,.NET的SDK也越来越多。简单的.NET调用,我们可以用COM的形式,或者自己写一个中转的dll来封装一下。
但以上两种方式都有各自的弊端,有些SDK没有导出COM接口,或者我们自己写的dll也不想导出,不想注册dll。甚至有时候,我们也不想再另外写一个.net的dll,毕竟还得去装一个vs。那么有没有简单方便的方法呢?
那就得说一说我们今天的主角了:DDNRuntime。
DDNRuntime全称Delphi .NET Runtime,是一个用Delphi调用.NET的库。仓库地址: 不在乎y/DDNRuntime-examples
简介
- 支持delphi调用.NET Framework/.NET Core 系统dll和自己写的dll。
- 支持调用C#、 http:// VB.NET 编写的程序集。
- 支持自动导入.net dll,并创建.net接口。
特性
- 不需要COM的支持。
- 使用非常的简单,只需要在Delphi中申明.NET的类型和方法即可。
- 专门的翻译工具,输入一个或者多个.NET的程序集DLL,即可输出一个或者两个Delphi导入单元。
- 支持接口类型。
- 支持动态数组(一维数组)。
- 支持委托类型。
- 支持委事件。
-
泛型类型(有限的支持。只支持XE8及以上且暂不支持嵌套的泛型,比如:
DNICollection<DNKeyValuePair<TKey, TValue>>
这类的多层嵌套)。
要求
- .NET Framework 4.x (仅支持Windows)
- .NET Core ( 计划支持跨平台 )
- NET Core 2.1 ,配置运行时版本见 DDNC.InitNETCore 。
- NET Core 3.1 ,配置运行时版本见 DDNC.InitNETCore 。
- NET 5.0 ,配置运行时版本见 DDNC.InitNETCore 。
-
最低要求
Rad Studio XE3
(推荐XE8或者更高版)。
暂不支持
- 二维数组。
- 嵌套类泛型。
说了这么多,来看看DDNRuntime最有特色的代码吧。类似fmx安卓上调用Java的代码,上手非常容易。
unit uHash;
interface
System.SysUtils,
DDN.Runtime,
DDN.mscorlib
{$IFDEF USE_NETCORE}
,DDNC.System.Security.Cryptography.Algorithms
,DDNC.System.Security.Cryptography.Csp
{$ENDIF};
procedure TestProc;
implementation
function BytesToString(value: TBytes; AEqValue: string): string;
begin
Result := TDNBitConverter.DNClass.ToString(value).Replace('-', '').ToLower;
if Result.Equals(AEqValue) then
Write('True ')
else Write('False ');
procedure Hash_SHA1;
sha1: DNSHA1;
result: TBytes;
begin
Writeln('---------------Hash_SHA1---------------');
sha1 := TDNSHA1Managed.Create;
result := sha1.ComputeHash(BytesOf('11111111111111aaaa'));
Writeln('result: ', BytesToString(result, '0d403430ba5307571f77a017cc1b67c1784a94a4'));
// 0d403430ba5307571f77a017cc1b67c1784a94a4
procedure Hash_SHA256;
sha256: DNSHA256;
result: TBytes;
begin
Writeln('---------------Hash_SHA256---------------');
sha256 := TDNSHA256Managed.Create;
result := sha256.ComputeHash(BytesOf('11111111111111aaaa'));
Writeln('result: ', BytesToString(result, '2ad87b450f4540dc1ed6c3fe1785fa5a75b26399cb07537da96e76ce26384fd6'));
//2ad87b450f4540dc1ed6c3fe1785fa5a75b26399cb07537da96e76ce26384fd6
procedure Hash_MD5;
md5: DNMD5CryptoServiceProvider;
result: TBytes;
begin
Writeln('---------------Hash_MD5---------------');
md5 := TDNMD5CryptoServiceProvider.Create;
result := md5.ComputeHash(BytesOf('11111111111111aaaa'));
Writeln('result: ', BytesToString(result, 'd071a85745b8a9befb4f028bcae7f3e9'));
// d071a85745b8a9befb4f028bcae7f3e9
procedure TestProc;
begin