2008/12/30 Thales Eduardo Barros de Oliveira <tebosoftw...@gmail.com>: > Pelo que entendi João, todas as classes, eu deveria mudar para esta que > sugere e quando fosse apontado a uma variavel, ou adicionado a uma > lista, deferia executar a função addRef, e quando não mais fosse usar, > deveria executar o FreeInstance?
Executar .Free, normalmente, como se não houvesse contagem de referência. Somente quando a contagem cair para zero é que o FreeInstance libera a instância. > um pouco diferente, mas muito interessante. Diferente porque é uma solução que não existe no mundo Object Pascal = misturar objetos e interfaces. Faltou acrescentar que, para implementar alguma interface, basta implementar os seguintes métodos na área protected: function TIntfObj.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; begin if GetInterface(IID, Obj) then Result := 0 else Result := HResult($80004002); // E_NOINTERFACE end; function TIntfObj._AddRef: Integer; stdcall; begin Result := AddRef; end; function TIntfObj._Release: Integer; stdcall; begin Result := Release; if Result = 0 then try Finit; finally inherited FreeInstance; end; end; E ainda distinguir entre classes que criam a instância para um ponteiro de objeto, e que criam a instância para um ponteiro de interface. Para o primeiro caso, RefCount deve começar em um, e para o segundo, deve começar em zero. Tenho as duas classes implementadas, respectivamente TPressManagedObject e TPressManagedIObject: http://pressobjects.svn.sourceforge.net/viewvc/pressobjects/trunk/Source/Core/PressClasses.pas?revision=1034&view=markup > obrigado pela dica Disponha. -- Joao Morais