DDNRuntime examples
v0.1.30
中文 | إنجليزي
DDNRuntime (Delphi .NET Framework/.NET Core Runtime)
أحدث إصدار: v0.1.30
اذهب للعرض
هذا ليس مشروعًا مفتوحًا ومجانيًا. يتم تخزين الأمثلة فقط هنا.
DNICollection<DNKeyValuePair<TKey, TValue>> مثل التعشيش متعدد المستويات). .NET Framework 4.x (يدعم فقط Windows)
.NET Core (خطة لدعم المنصات عبر)
الحد الأدنى للمتطلبات هو Rad Studio XE3 (أوصي XE8 أو أعلى).
يمكن استخدام الإصدار التجريبي لمدة خمس دقائق ، والتي لن يتمكن بعدها من الاستمرار في التنفيذ. احصل على ملف تجريبي ddnruntime ، انسخ ملف DCU لإصدار Delphi الذي تستخدمه في دليل src .
en-US10.3.3(20.0) في ddn-xxx-dcus إلى DDNRuntime-examplessrc| نوع الاشتراك | السعر / سنة واحدة (الدولار الأمريكي) | سعر التجديد/سنة | يشرح |
|---|---|---|---|
| الطبعة الشخصية | $ ؟؟؟؟ / 1 مطور | $ ؟؟؟؟ | فقط DCU و DLL ، لا رمز مصدر |
| Enterprise Edition | $ ؟؟؟؟ / 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 .