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 .