Pregunta

En realidad estoy usando enlace tardío en Delphi, y necesito saber cual es la forma correcta de trabajar con él.

Mi principal preocupación es acerca de cómo manejar la memoria utilizada por estos objetos, debo liberar la memoria?

comprobar este código de ejemplo

var
  chEaten: Integer;
  BindCtx: IBindCtx;
  Moniker: IMoniker;
 MyObject:: IDispatch;
begin
try  
  OleCheck(CreateBindCtx(0, bindCtx));
  OleCheck(MkParseDisplayName(BindCtx, StringToOleStr('oleobject.class'), chEaten, Moniker));
  OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, MyObject));

  MyObject.Metod1();
  MyObject.Metod2();
 finally
 MyObject:=nil,// is  this necesary?
 end;

end;

Sería útil si alguien explicar brevemente cómo se maneja la memoria en este tipo de objetos.

gracias de antemano.

¿Fue útil?

Solución

objetos de interfaz COM en Delphi se gestionan automáticamente por el compilador. Se inserta llamadas ocultas a AddRef y Release en los lugares apropiados, y las interfaces tendrá automáticamente sus métodos Release llamadas cuando salen del ámbito de aplicación. Así que no, que no tiene que nil a cabo la referencia.

Otros consejos

Al igual que Mason dijo, la memoria de las interfaces es administrado por el compilador para usted. Sin embargo, StringToOleStr () devuelve un BSTR asignado que necesita ser liberados de forma manual con SysFreeString (). Debe utilizar el tipo WideString lugar, que gestiona la memoria para usted, por ejemplo:

OleCheck(MkParseDisplayName(BindCtx, PWideChar(WideString('oleobject.class')), chEaten, Moniker)); 

O:

var
  w: WideString;

w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker)); 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top