Fasm 1/2 writed
This commit is contained in:
@@ -2,7 +2,7 @@ unit RuntimeBuilder.Fasm;
|
||||
|
||||
interface
|
||||
|
||||
uses RuntimeBuilder.Types,FasmOnDelphi;
|
||||
uses RuntimeBuilder.Types,FasmOnDelphi,System.TypInfo,System.Rtti,winapi.windows;
|
||||
|
||||
type
|
||||
TRTBFasmCompiler=class(TRTBCompiler)
|
||||
@@ -15,13 +15,22 @@ type
|
||||
sb:NativeUInt;
|
||||
public
|
||||
constructor Create(p:Pointer;sb:NativeUInt);
|
||||
//function Call(args:array of const;CallType:TRTBCallType=CRTBCallTypeDefault):Variant;override;
|
||||
function Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;override;
|
||||
destructor Destroy;override;
|
||||
end;
|
||||
TRTBLib=class abstract
|
||||
private type
|
||||
TRTBFasmLibFunc=class(TRTBFasmFunc)
|
||||
public
|
||||
//constructor Create(p:Pointer);
|
||||
//destructor Destroy;override;
|
||||
end;
|
||||
private
|
||||
//function GetFuntion(Name:string):TRTBFunc;virtual;abstract;
|
||||
public
|
||||
constructor Create(p:Pointer;sb:NativeUInt);
|
||||
//property Funtion[Name:string]:TRTBFunc read GetFuntion;
|
||||
//destructor Destroy;override;
|
||||
end;
|
||||
protected
|
||||
FText:string;
|
||||
@@ -30,7 +39,7 @@ type
|
||||
public
|
||||
constructor Create(Compiler:TRTBFasmCompiler);
|
||||
function CompilateAsFunc:TRTBFunc;override;
|
||||
//function CompilateAsLib:TRTBLib;virtual;abstract;
|
||||
function CompilateAsLib:TRTBLib;virtual;abstract;
|
||||
end;
|
||||
public
|
||||
CompilerMem:NativeUInt;
|
||||
@@ -46,8 +55,39 @@ uses System.SysUtils;
|
||||
|
||||
constructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmFunc.Create(p:Pointer;sb:NativeUInt);
|
||||
begin
|
||||
Self.p:=p;
|
||||
Self.p:=VirtualAlloc(nil,sb,MEM_COMMIT ,PAGE_EXECUTE_READWRITE);
|
||||
CopyMemory(Self.p,p,sb);
|
||||
Self.sb:=sb;
|
||||
FreeMem(p);
|
||||
end;
|
||||
|
||||
function TRTBFasmCompiler.TRTBFasmSource.TRTBFasmFunc.Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;
|
||||
{$IFDEF CPUX64}
|
||||
//function()
|
||||
{$ENDIF}
|
||||
begin
|
||||
{$IFDEF CPUX64}
|
||||
Result:=Invoke(p,args,ccReg,OutType);
|
||||
{$ELSE}
|
||||
case CallType of
|
||||
CRTBCallTypeRegister,CRTBCallTypeDefault:Result:=Invoke(p,args,ccReg,OutType);
|
||||
CRTBCallTypeStdCall:Result:=Invoke(p,args,ccStdCall,OutType);
|
||||
CRTBCallTypeCdecl:Result:=Invoke(p,args,ccCdecl,OutType);
|
||||
CRTBCallTypePascal:Result:=Invoke(p,args,ccPascal,OutType);
|
||||
CRTBCallTypeSafeCall:Result:=Invoke(p,args,ccSafeCall,OutType);
|
||||
end;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
destructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmFunc.Destroy;
|
||||
begin
|
||||
VirtualFree(p,sb,MEM_RELEASE);
|
||||
p:=nil;
|
||||
end;
|
||||
|
||||
constructor TRTBFasmCompiler.TRTBFasmSource.TRTBLib.Create(p:Pointer;sb:NativeUInt);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function TRTBFasmCompiler.TRTBFasmSource.GetText:string;
|
||||
|
||||
Reference in New Issue
Block a user