Frage

eigentlich ist ich mit später Bindung in delphi, und ich muß wissen, weicht der richtige Weg ist, mit ihm zu arbeiten.

Mein Hauptanliegen ist, wie ich die Erinnerung von diesen Objekten umgehen, muss ich den Speicher frei?

lesen Sie in diesem Beispielcode

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;

wäre hilfreich, wenn jemand kurz erklären, wie das Gedächtnis in dieser Art von Objekten behandelt wird.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

COM-Schnittstelle Objekte in Delphi werden automatisch vom Compiler verwaltet. Es fügt versteckt Anrufe AddRef und Release an den entsprechenden Stellen und Ihre Schnittstellen automatisch ihre Release Methoden aufgerufen haben, wenn sie von Umfang hinausgehen. Also nein, müssen Sie nicht auf nil aus der Referenz.

Andere Tipps

Wie Mason sagte, der Speicher für die Schnittstellen wird vom Compiler für Sie verwaltet. Jedoch StringToOleStr () gibt einen zugeordneten BSTR dass Bedarf manuell mit SysFreeString befreit werden (). Sie sollten den Typ Wide verwenden Sie stattdessen, die für Sie den Speicher verwaltet, zum Beispiel:

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

Oder:

var
  w: WideString;

w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker)); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top