Einzelnen Beitrag anzeigen

taveuni

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

AW: Delphi 2007/XE - OleVariant Memory Problem mit Schnittstelle

  Alt 8. Nov 2013, 16:51
Ächz! Delphi treibt mich mal noch zum Wahnsinn!
Falls mal jemand ein ähnliches Problem hat:

Nach tagelangem googlen bin ich auf einen Link von Beckhoff gestossen.
Darin wird ganz unten bei "Comment" auf eine falsche Deklaration des Delphi Wrapper Imports hingewiesen. Die mussten dann speziell für Delphi eine andere Methode einführen.

Ich habe nun die ursprüngliche Deklaration der automatisch erzeugten *tlb.pas von:

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

auf

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

Schau an: Das Memory Leak ist weg.
Weshalb aber Delphi 2007 den Parameter als Referenz übergibt obwohl der Parameter nicht als Var deklariert ist -
und warum Delphi XE beim Import die Deklaration falsch macht weiss der Geier.

Natürlich ist das nicht die Endlösung. Denn bei einer neuen Version des ActiveX wird die Korrektur überschrieben.
Das ganze hat mich etwa eine Woche gekostet. Ich bin platt.

Das Dumme ist einfach dass einem bei Delphi niemand (mehr) helfen kann.
Das ActiveX sowie die darunterliegende native API wird weltweit stark genutzt.
Aber entweder die Wrapper Schicht mit .net oder java. Darunter mit C oder C++.
Einige Delphi Nutzer sind vorhanden aber alle <= D2007.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat