procedure Print(const S: String); begin ShowMessage(S); end; var H_MyFunc: Integer; I: Integer; P: Pointer; begin {$O-} PaxCompiler1.Reset; PaxCompiler1.RegisterLanguage(PaxPascalLanguage1); PaxCompiler1.RegisterHeader(0, 'procedure Print(const S: String);', @Print); PaxCompiler1.AddModule('1', PaxPascalLanguage1.LanguageName); PaxCompiler1.AddCode('1', 'uses SysUtils;'); PaxCompiler1.AddCode('1', 'function MyFunc(U, V: Integer): Currency; cdecl;'); PaxCompiler1.AddCode('1', 'begin'); PaxCompiler1.AddCode('1', ' try'); PaxCompiler1.AddCode('1', ' result := U / V;'); PaxCompiler1.AddCode('1', ' except'); PaxCompiler1.AddCode('1', ' on E: Exception do'); PaxCompiler1.AddCode('1', ' begin'); PaxCompiler1.AddCode('1', ' print(E.Message);'); PaxCompiler1.AddCode('1', ' result := 7;'); PaxCompiler1.AddCode('1', ' end;'); PaxCompiler1.AddCode('1', ' end;'); PaxCompiler1.AddCode('1', 'end;'); PaxCompiler1.AddCode('1', 'begin'); PaxCompiler1.AddCode('1', 'end.'); if PaxCompiler1.Compile(PaxProgram1) then begin H_MyFunc := PaxCompiler1.GetHandle(0, 'MyFunc', true); P := PaxProgram1.GetAddress(H_MyFunc); // get address of script-defined function PaxInvoke1.Address := P; PaxInvoke1.This := nil; // this is not a method, but global function. PaxInvoke1.ClearArguments; PaxInvoke1.AddArgAsInteger(8) PaxInvoke1.AddArgAsInteger(2); PaxInvoke1.SetResultAsCurrency; PaxInvoke1.CallConv := _ccCDECL; PaxProgram1.SetEntryPoint(PaxInvoke1); PaxProgram1.Run; ShowMessage(CurrToStr(Currency(PaxInvoke1.GetResultPtr^))); end else for I:=0 to PaxCompiler1.ErrorCount do ShowMessage(PaxCompiler1.ErrorMessage[I]); end;