DDNRuntime examples
v0.1.30
中文|英语
DDNRuntime(Delphi .NET框架/.NET Core Runtime)
最新版本:V0.1.30
去查看
这不是开源和免费项目。这里只存储了示例。
DNICollection<DNKeyValuePair<TKey, TValue>>这样的多级嵌套)。 .NET框架4.x(仅支持Windows)
.NET核心(计划支持跨平台)
最小要求是Rad Studio XE3 (建议XE8或更高)。
试用版可以使用五分钟,超过该版本将无法继续执行。获取DDNRuntime试用文件,将您使用的Delphi版本的DCU文件复制到src Directory。
en-US10.3.3(20.0)的文件夹解压缩为 ddn-xxx-dcus to DDNRuntime-examplessrc| 订阅类型 | 价格 / 1年(美元) | 更新价格/1年 | 解释 |
|---|---|---|---|
| 个人版 | $ ???? / 1开发人员 | $ ???? | 只有DCU和DLL,没有源代码 |
| 企业版 | $ ???? / 10个开发人员 | $ ???? | 只有DCU和DLL,没有源代码 |
**笔记: ??????? **
IID_IDN_Name = ' {B130231B-447A-48F5-B476-43FB07E99457} ' ;
IID_IDN: TGUID = ' {B130231B-447A-48F5-B476-43FB07E99457} ' ;
IID_IDNClass_Name = ' {E0CE1E32-5502-4F10-B263-6490F332E340} ' ;
IID_IDNClass: TGUID = ' {E0CE1E32-5502-4F10-B263-6490F332E340} ' ;
IID_IDNInstance_Name = ' {152F4F46-D220-423A-8135-FE6DF52A7932} ' ;
IID_IDNInstance: TGUID = ' {152F4F46-D220-423A-8135-FE6DF52A7932} ' ;
IID_ILocalObject_Name = ' {C4A9BE07-6DF9-448A-856F-9323768D36FE} ' ;
IID_ILocalObject: TGUID = ' {C4A9BE07-6DF9-448A-856F-9323768D36FE} ' ;
IID_DNObject_Name = ' {81C5FE01-027C-3E1C-98D5-DA9C9862AA21} ' ;
IID_DNObjectClass_Name = ' {52839F0D-B981-46B3-8A5C-5C7B1449E1EB} ' ;
DNObject_FullName = ' System.Object ' ;
// / <summary>
// / The native pointer in DotNet is actually defined as a class to prevent being GC.
// / </summary>
DNNObject = type Pointer;
IDN = interface
[IID_IDN_Name]
end ;
IDNClass = interface (IDN)
[IID_IDNClass_Name]
end ;
IDNInstance = interface (IDN)
[IID_IDNInstance_Name]
end ;
// / <summary>
// / Used to get the saved DotNet instance
// / </summary>
ILocalObject = interface (IDN)
[IID_ILocalObject_Name]
function GetObjectID : DNNObject;
end ;
// / <summary>
// / Load assembly
// / </summary>
// / <param name="AFileName">An assembly qualified name or an absolute assembly file name (full path)</param>
function LoadAssemblyModule ( const AFileName: string): Boolean;
// / <summary>
// / Set whether to display the detailed information of .NET exceptions
// / </summary>
procedure SetShowDetailedExceptionMessage (AValue: Boolean); // / <summary>
// / Return instance objects from DotNet native objects
// / </summary>
class function Wrap (ADNObjectID: DNNObject): T; overload; static;
// / <summary>
// / Return an object from an interface instance
// / </summary>
class function Wrap ( const AInstance: IDNInstance): T; overload; static;
// / <summary>
// / Call the constructor or static method in DotNet.
// / </summary>
class property DNClass: C read GetDNClass;
// / <summary>
// / Create a DotNet instance object, call the default constructor
// / </summary>
class function Create : T; static;
// / <summary>
// / clsID means the native pointer of the instance in DotNet
// / </summary>
class function GetClsID : DNNObject; static;
// / <summary>
// / .NET type information
// / </summary>
class property typeid: DNType read GetTypeId;注意:所有导入的.NET类型均以DN开头,例如DNType ,而非接口类型进口商以TDN +.NET类型开头,例如: TDNType 。如果.NET中的枚举值名与Delphi关键字具有相同的名称,请在名称的末尾添加_ 。
unit DDNTest;
interface
uses
System.SysUtils,
DDN.Runtime,
DDN.mscorlib;
implementation
procedure TestMemoryStream ;
var
LMem: DNMemoryStream;
LBytes: TArray<Byte>;
B: Byte;
LReadLen: Integer;
begin
LMem := TDNMemoryStream.Create;
LMem.Write([ 1 , 2 , 3 , 4 , 5 ], 0 , 5 );
LMem.WriteByte( 121 );
LMem.Flush;
LMem.Position := 0 ;
Writeln( ' data Length: ' , LMem.Length);
SetLength(LBytes, LMem.Length);
LReadLen := LMem.Read(LBytes, 0 , Length(LBytes));
Writeln( ' len: ' , LReadLen);
for b in LBytes do
Write(b, ' ' );
Writeln;
end ;
procedure TestReflection ;
var
LType: DNType;
LMethods: TArray<DNMethodInfo>;
LM: DNMethodInfo;
LParams: TArray<DNParameterInfo>;
LP: DNParameterInfo;
I: Integer;
begin
LType := TDNMemoryStream.typeid;
// LType := TDNType.DNClass.GetType('System.IO.MemoryStream');
Writeln( ' LType ptr= ' , NativeUint(LType));
if LType <> nil then
begin
LMethods := LType.GetMethods;
Writeln( ' method Count: ' , Length(LMethods));
for LM in Lmethods do
begin
Writeln(Format( ' method Name:%s ' , [LM. Name ]));
LParams := LM.GetParameters;
I := 0 ;
for LP in LParams do
begin
if I > 0 then
write( ' ; ' );
Write(Format( ' %s: %s ' , [LP. Name , LP.ParameterType.FullName]));
Inc(I);
end ;
Writeln( ' ' );
end ;
end ;
end ;
end .
type
TDelegateClass = class
public
// A method can be an instance method or a class method.
class function CheckValidationResult (sender: DNObject; certificate: DNX509Certificate; chain: DNX509Chain; errors: DNSslPolicyErrors): Boolean;
end ;
class function TDelegateClass.CheckValidationResult (
sender: DNObject;
certificate: DNX509Certificate;
chain: DNX509Chain;
errors: DNSslPolicyErrors): Boolean;
begin
Writeln( ' call TDelegateTest.CheckValidationResult: ' );
Writeln( ' sender: ' , sender.ToString);
Writeln( ' certificate: ' , certificate.ToString);
Writeln( ' chain: ' , chain.ToString);
Writeln( ' errors: ' , errors);
Result := True;
end ;
TDNServicePointManager.DNClass.ServerCertificateValidationCallback := TDelegateClass.CheckValidationResult; type
// test
TEventClass = class
public
// A method can be an instance method or a class method.
class procedure OnButtonClick (sender: DNObject; e: DNEventArgs);
end ;
class procedure TEventClass.OnButtonClick (sender: DNObject; e: DNEventArgs);
begin
TDNMessageBox.DNClass.Show( ' Button.Click: ' + sender.ToString);
// TDNButton.Wrap(Sender).remove_Click(TDelegateTest.OnButtonClick);
end ;
function CreateMainForm (): DNForm;
var
LButton: DNButton;
LR: DNRectangle;
// LEdit: DNTextBox;
begin
LR := TDNScreen.DNClass.PrimaryScreen.Bounds;
Result := TDNForm.Create;
Result.Text := ' Delphi .NET Runtime ' ;
LButton := TDNButton.Create;
LButton.Text := ' Hello ' ;
LButton.add_Click(TEventClass.OnButtonClick);
LButton.Location := TDNPoint.DNClass.init( 100 , 100 );
Result.Controls.Add(LButton);
// Result.StartPosition := DNFormStartPosition.Manual;
Result.StartPosition := DNFormStartPosition.CenterScreen;
// Result.Location := TDNPoint.DNClass.init((LR.Width - Result.Width) div 2, (LR.Height - Result.Height) div 2);
end ;
begin
TDNApplication.DNClass.EnableVisualStyles();
TDNApplication.DNClass.SetCompatibleTextRenderingDefault(False);
TDNApplication.DNClass.Run(CreateMainForm());
end .