![]() |
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:
Laut MSDN für IEnumPins::Next method : ppPins [out]
// 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; 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:
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) ....
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); 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 01:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz