Einzelnen Beitrag anzeigen

taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
533 Beiträge
 
Delphi 11 Alexandria
 
#1

Delphi 2007/XE - OleVariant Memory Problem mit Schnittstelle

  Alt 7. Nov 2013, 10:56
Hallo zusammen,
Ich habe auch mal wieder eine Frage. Vor einiger Zeit musste ich ein Projekt von D2007 auf XE hochziehen.
Darin wird ein ActiveX eines Fremdherstellers benutzt welcher einen Algorithmus zur Bildanalyse anbietet.
Nach dem portieren haben wir bemerkt dass das Memory kontinuierlich steigt. Nach Tagen wurde der Fehler eingekreist.

Das Leak tritt an einer Funktion auf welche laut Dokumentation so beschrieben ist:

Code:
[Visual Basic] Function LoadFromMem(ByVal buffer As Variant, ByVal pixelformat As enumFormat) As Long
[Delphi] function LoadFromMem(buffer: Variant; pixelformat : TOleEnum) : Integer;
[C++] long LoadFromMem(VARIANT buffer, enumFormat pixelformat);
Der Wrapper nach dem Import in Delphi macht folgendes draus:

function LoadFromMem(buffer: OleVariant; pixelformat: enumFormat): Integer; dispid 54;

Eine ganz vereinfachte Funktion in Testprogramm sieht nun so aus:

Delphi-Quellcode:
procedure TForm1.LoadStreamToGxImage(AStream: TMemoryStream);
var
  Buf: Array of Byte;
begin
  Try
    SetLength(Buf,AStream.Size);
    AStream.Read(Buf[0],AStream.Size);
    gxImage.LoadFromMem(Buf, GX_JPEG); // dies ist der Aufruf an die Schnittstelle
  Finally
    SetLength(Buf,0);
  End;
end;
Funktioniert alles ganz wunderbar mit Delphi 2007. Mit Delphi XE2 steigt das Memory im Verhältnis zur Streamsize.
Hat irgendein netter Mensch irgendeine Idee weshalb X2 den Speicher nicht freigibt - D2007 aber schon?
Oder muss ich da noch irgendwo eine Compilereinstellung beachten/setzen?

Vielen Dank für Eure Mühe

Werner

Edit:
Mittlerweile habe ich noch "kurz" die XE5 Trial heruntergeladen und installiert.
Es ist das identische Verhalten zu beobachten. Ich bin wirklich! sehr froh falls jemand eine Idee hat.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.

Geändert von taveuni ( 7. Nov 2013 um 15:23 Uhr) Grund: Ergänzungen angebracht
  Mit Zitat antworten Zitat