DDNRuntime examples
v0.1.30
中文 | 영어
ddnruntime (delphi .net 프레임 워크/.NET 코어 런타임)
최신 버전 : v0.1.30
보기로 이동하십시오
이것은 오픈 소스 및 무료 프로젝트가 아닙니다. 예제 만 여기에 저장됩니다.
DNICollection<DNKeyValuePair<TKey, TValue>> 아직 지원되지 않습니다. .NET Framework 4.x (Windows 만 지원)
.NET 코어 (크로스 플랫폼 지원 계획)
최소 요구 사항은 Rad Studio XE3 입니다 (XE8 이상 권장).
시험판은 5 분 동안 사용할 수 있으며, 그 이상으로 실행할 수 없습니다. DDNRUNTIME 시험 파일을 받고 사용중인 Delphi 버전의 DCU 파일을 src 디렉토리에 복사하십시오.
DDNRuntime-examplessrc 에서 en-US10.3.3(20.0) 의 폴더를 압축합니다.| 구독 유형 | 가격 / 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 유형은 DNType 와 같은 DN 으로 시작하며 비 인터페이스 유형 수입업자는 TDN + 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 .