88 lines
2.2 KiB
Plaintext
88 lines
2.2 KiB
Plaintext
/// SOA interface methods definition to circumvent FPC missing RTTI
|
|
{{#uri}}
|
|
// - retrieved from http://{{host}}/{{uri}}
|
|
// at {{time}} using "{{templateName}}" template
|
|
{{/uri}}
|
|
{{^uri}}
|
|
// - generated at {{time}}
|
|
{{/uri}}
|
|
unit {{fileName}};
|
|
|
|
{
|
|
WARNING:
|
|
This unit has been generated by a mORMot {{mORMotVersion}} server.
|
|
Any manual modification of this file may be lost after regeneration.
|
|
|
|
Synopse mORMot framework. Copyright (C) {{year}} Arnaud Bouchez
|
|
Synopse Informatique - http://synopse.info
|
|
|
|
This unit is released under a MPL/GPL/LGPL tri-license,
|
|
and therefore may be freely included in any application.
|
|
|
|
This unit is intended to work on older FPC compilers, which lack of RTTI
|
|
for interfaces - see http://bugs.freepascal.org/view.php?id=26774
|
|
|
|
USAGE:
|
|
|
|
Add this {{fileName}} unit to your uses clause, so that the following
|
|
interfaces would be defined as expected by mORMot under FPC:
|
|
|
|
{{#soa.services}}
|
|
- {{interfaceName}}
|
|
{{/soa.services}}
|
|
|
|
}
|
|
|
|
interface
|
|
|
|
{$I Synopse.inc} // needed for setting HASINTERFACERTTI and proper FPC modes
|
|
|
|
uses
|
|
SysUtils,
|
|
Classes,
|
|
SynCommons,
|
|
SynLog,
|
|
mORMot{{#units}},
|
|
{{.}}{{/units}};
|
|
|
|
|
|
implementation
|
|
|
|
{{#soa.enabled}}
|
|
{$ifndef HASINTERFACERTTI} // circumvent old FPC bug of missing RTTI
|
|
|
|
{ TInterfaceFactoryDefinition }
|
|
|
|
type
|
|
/// define and manage missing interface RTTI for the following interfaces:
|
|
{{#soa.services}}
|
|
// - {{interfaceName}}
|
|
{{/soa.services}}
|
|
TInterfaceFactoryDefinition = class(TInterfaceFactoryGenerated)
|
|
protected
|
|
procedure AddMethodsFromTypeInfo(aInterface: PTypeInfo); override;
|
|
end;
|
|
|
|
procedure TInterfaceFactoryDefinition.AddMethodsFromTypeInfo(aInterface: PTypeInfo);
|
|
begin
|
|
{{#soa.services}}
|
|
if aInterface=TypeInfo({{interfaceName}}) then begin
|
|
{{#methods}}
|
|
AddMethod('{{methodName}}',[
|
|
{{#args}} ord(smd{{dirName}}),'{{argName}}',TypeInfo({{typeSource}}){{#isArgLast}}]);{{/isArgLast}}{{^isArgLast}},
|
|
{{/isArgLast}}{{/args}} {{^args}}]);{{/args}}
|
|
{{/methods}}
|
|
exit;
|
|
end;
|
|
{{/soa.services}}
|
|
end;
|
|
|
|
initialization
|
|
{{#soa.services}}
|
|
TInterfaceFactoryDefinition.RegisterInterface(TypeInfo({{interfaceName}}));
|
|
{{/soa.services}}
|
|
|
|
{$endif HASINTERFACERTTI}
|
|
{{/soa.enabled}}
|
|
end.
|