[Lazarus] IUnknown and reference counting
Graeme Geldenhuys
graeme at geldenhuys.co.uk
Thu Mar 21 12:38:28 CET 2013
On 2013-03-21 10:54, Sven Barth wrote:
> If you just want plain interfaces like in Java and other
> languages than you need to use what is called "CORBA" interfaces in FPC.
Delphi doesn't have CORBA style interfaces like FPC. The work-around in
Delphi was to implement TNullInterfacedObject which has the IUnknown
signature, but no reference counting is done.
eg:
type
// non reference counted interface
TNullInterfacedObject = class(TObject, IUnknown)
protected
function QueryInterface(const IID: TGUID; out Obj): longint; stdcall;
function _AddRef: longint; stdcall;
function _Release: longint; stdcall;
end;
{ TNullInterfacedObject }
function TNullInterfacedObject.QueryInterface(const IID: TGUID; out
Obj): longint; stdcall;
begin
if GetInterface(IID, Obj) then
Result := 0
else
result := integer(e_nointerface);
end;
function TNullInterfacedObject._AddRef: longint; stdcall;
begin
Result := -1;
end;
function TNullInterfacedObject._Release: longint; stdcall;
begin
Result := -1;
end;
Regards,
- Graeme -
--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/
More information about the Lazarus
mailing list