Question

en fait, je suis en utilisant contraignant fin delphi, et je dois savoir Wich est la bonne façon de travailler avec elle.

Ma principale préoccupation est de savoir comment je gère la mémoire utilisée par ces objets, je dois libérer la mémoire?

vérifier cet exemple de code

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;

serait utile si quelqu'un expliquer brièvement comment est gérée la mémoire dans ce type d'objets.

Merci d'avance.

Était-ce utile?

La solution

objets COM Interface dans Delphi sont gérés automatiquement par le compilateur. Il insère des appels cachés à AddRef et Release aux endroits appropriés et vos interfaces auront automatiquement leurs méthodes de Release appelés quand ils sont hors de portée. Donc non, vous n'avez pas à nil la référence.

Autres conseils

Comme dit Mason, la mémoire des interfaces est géré par le compilateur pour vous. Cependant, StringToOleStr () retourne un BSTR alloué qui doit être libéré manuellement à l'aide SysFreeString (). Vous devez utiliser le type WideString à la place, qui gère la mémoire pour vous, par exemple:

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

Ou:

var
  w: WideString;

w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker)); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top