git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@35 05c56307-c608-d34a-929d-697000501d7a
85 lines
2.1 KiB
ObjectPascal
85 lines
2.1 KiB
ObjectPascal
{Delphi function importer (runtime)}
|
|
unit ifpidelphiruntime;
|
|
{
|
|
Innerfuse Pascal Script Call unit
|
|
You may not copy a part of this unit, only use it as whole, with
|
|
Innerfuse Pascal Script Script Engine.
|
|
}
|
|
{$I ifps3_def.inc}
|
|
interface
|
|
uses
|
|
ifpicall, ifps3, ifps3utl, ifps3common;
|
|
type
|
|
{The calling convention}
|
|
TDelphiCallingConvention = (cdRegister, cdPascal, CdCdecl, CdStdCall);
|
|
|
|
{Register a delphi function}
|
|
procedure RegisterDelphiFunctionR(Se: TIFPSExec; ProcPtr: pointer; const Name: string; cc: TDelphiCallingConvention);
|
|
{
|
|
SE is the Script executer.
|
|
ProcPtr is a pointer to the proc to be called.
|
|
Name is the name of that proc (uppercased).
|
|
CC is the calling convention.
|
|
|
|
}
|
|
|
|
{See source}
|
|
{$IFDEF D4PLUS}
|
|
var
|
|
{$ELSE}
|
|
const
|
|
{$ENDIF}
|
|
DelphiRPFunc: PResourcePtrSupportFuncs = nil;
|
|
|
|
// This will be automaticly set when you use ifpiclassruntime.pas.
|
|
|
|
|
|
implementation
|
|
|
|
function p1(Caller: TIFPSExec; p: PIFProcRec; Global, Stack: TIfList): Boolean;
|
|
var
|
|
i: Integer;
|
|
MyList: TIfList;
|
|
n: PIFVariant;
|
|
CurrStack: Cardinal;
|
|
s: string;
|
|
begin
|
|
s := P^.ExportDecl;
|
|
if length(s) = 0 then begin Result := False; exit; end;
|
|
CurrStack := Stack.Count - Cardinal(length(s));
|
|
if s[1] = #0 then inc(CurrStack);
|
|
MyList := tIfList.Create;
|
|
|
|
for i := 2 to length(s) do
|
|
begin
|
|
MyList.Add(nil);
|
|
end;
|
|
for i := length(s) downto 2 do
|
|
begin
|
|
n :=rp(Stack.GetItem(CurrStack));
|
|
if s[i] <> #0 then
|
|
begin
|
|
n^.RefCount := n^.RefCount or IFPSAddrStackStart;
|
|
end;
|
|
MyList.SetItem(i - 2, n);
|
|
inc(CurrStack);
|
|
end;
|
|
try
|
|
if s[1] <> #0 then
|
|
begin
|
|
n := rp(Stack.GetItem(CurrStack));
|
|
end else n := nil;
|
|
result := InnerfuseCall(Caller, nil, p^.Ext1, TCallingconvention(p^.ext2), MyList, n, DelphiRPFunc);
|
|
except
|
|
result := false;
|
|
end;
|
|
MyList.Free;
|
|
end;
|
|
|
|
procedure RegisterDelphiFunctionR(Se: TIFPSExec; ProcPtr: pointer; const Name: string; cc: TDelphiCallingConvention);
|
|
begin
|
|
Se.RegisterFunctionName(Name, p1, ProcPtr, Pointer(cc));
|
|
end;
|
|
|
|
end.
|