[fpc-pascal] What's a unit?
pascaldragon at googlemail.com
Tue Feb 19 17:54:56 CET 2013
On 19.02.2013 17:49, Mark Morgan Lloyd wrote:
> Sven Barth wrote:
>>> OK, so is it possible to set up a constant extended record (i.e. the
>>> work being done entirely at compilation time) that mimics an
>>> instantiated object? Would
>>> if LibCapShim is TObject then
>>> be safe where LibCapShim could be either an object (possibly nil) or a
>>> constant extended record?
>> You could try to overload the "is" operator for your to be defined
>> static record [AFAIK it should work]. E.g.
>> === code begin ===
>> TLibCapShim = record
>> cap_get_proc: tcap_get_proc;
>> // ...
>> class operator is (aLeft: TLibCapShim; aRight: TClass): Boolean;
>> class operator TLibCapShim.Is(aLeft: TLibCapShim; aRight: TClass):
>> Result := False;
>> === code end ===
> Thanks Sven, looks interesting and I'll play with it presently. Can an
> extended record's fields/methods be set up at compilation time, or do
> they need to be done by code?
The example I've given was for the case that you load the functions
dynamically and use the procvars contained in the record. You could do
it this way as well:
=== code begin ===
TLibCapShim = record
function cap_get_proc: tcaps;
function TLibCapShim.cap_get_proc: tcaps;
Result := UnitContainingImports.cap_get_proc;
=== code end ===
You need to pay attention to call the correct functions, of course.
More information about the fpc-pascal