Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   TBCEnumPins (https://www.delphipraxis.net/182256-tbcenumpins.html)

SonnyBoyPro 13. Okt 2014 20:30

TBCEnumPins
 
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 :gruebel:. 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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz