Hallo zusammen,
ich bin gerade am Basteln eines Direct-Show Filewrite-Filter. Dazu hab ich mal das Dump-Example
aus dem DSPack compiliert und getestet --> Absturz. Sowohl unter Lazarus als auch unter Delphi XE.
Folgende Codestelle hab ich nun in der Funktion TBCEnumPins.Next als den Übeltäter ausfindig gemacht:
Delphi-Quellcode:
// We only want to return this pin, if it is not in our cache
if FPinCache.IndexOf(Pin) = -1
then
begin
// From the object get an IPin interface
TPointerDynArray(ppPins)[Fetched] :=
nil;
// hier knallts
TIPinDynArray(ppPins)[Fetched] := Pin;
inc(Fetched);
FPinCache.Add(Pin);
dec(RealPins);
end;
Laut
MSDN für IEnumPins::Next method : ppPins [out]
Array of size cPins that is filled with IPin pointers. The caller must release the interfaces.
also hab ich mal abgeändert auf
Delphi-Quellcode:
var
lPin: TIPinDynArray;
...
// From the object get an IPin interface
SetLength(lPin,Fetched+1);
lPin[Fetched]:=nil;
lPin[Fetched]:=Pin;
ppPins:=lPin[0];
inc(Fetched);
FPinCache.Add(Pin);
dec(RealPins);
Meiner Meinung nach kann der Orginal-Code gar nicht funktionieren. oder war das Compiler-Verhalten von Delphi < XE anders? Und wenn nicht, warum ist das nie jemanden aufgefallen
. Dr. Google schweigt. und DS Pack ist ja nicht gerade neu (nicht negativ gemeint) ....
Zumindest läufts mal, und der Filter wird in GraphEdit angezeigt. Mich tät halt interessieren ob's so richtig ist, oder ob ich noch was ändern/aufpassen muss.
bg