中文 | Inglés
DDNRUNTIME (Delphi .net Framework/.NET Core Runtime)
Última versión: V0.1.30
Ir a la vista
Este no es un código abierto y un proyecto gratuito. Solo se almacenan ejemplos aquí.
DNICollection<DNKeyValuePair<TKey, TValue>> dicha anidación de niveles múltiples). .NET Framework 4.x (solo admite Windows)
.NET Core (planificar para admitir la plataforma cruzada)
El requisito mínimo es Rad Studio XE3 (recomiendo XE8 o superior).
La versión de prueba se puede usar durante cinco minutos, más allá de lo cual no podrá continuar con la ejecución. Obtenga el archivo de prueba DDNRuntime, copie el archivo DCU de la versión de Delphi que está utilizando en el directorio src .
en-US10.3.3(20.0) en ddn-xxx-dcus a DDNRuntime-examplessrc| Tipo de suscripción | Precio / 1 año (dólar estadounidense) | Precio de renovación/1 año | explicar |
|---|---|---|---|
| Edición personal | $ ???? / 1 desarrollador | $ ???? | Solo DCU y DLL, sin código fuente |
| Edición empresarial | $ ???? / 10 desarrolladores | $ ???? | Solo DCU y DLL, sin código fuente |
**Nota: ??????? **
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; Nota: Todos los tipos de .NET importados comienzan con DN , como DNType , y los importadores de tipo no interfaz comienzan con el tipo TDN +.NET, como: TDNType . Si el nombre del valor de enumeración en .NET tiene el mismo nombre que la palabra clave Delphi, agregue _ al final del nombre.
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 .