Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirectShow: IMediaEvent.GetEvent Syntaxfehler (https://www.delphipraxis.net/194209-directshow-imediaevent-getevent-syntaxfehler.html)

FAlter 28. Okt 2017 15:53

DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

es geht um folgende Methode:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Ich habe drei Variablen für den Event-Code sowie die beiden Parameter deklariert. Ich habe es mit Integer und 2x Pointer (wie aus der verlinkten Doku abzulesen) probiert sowie mit 3x Integer. In beiden Fällen bekomme ich folgende Meldung:

E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen.

Wenn ich mit der Maus auf die Methode zeige werden mit aber alle Parameter als Integer angezeigt (siehe Bild).

Welches sind nun die richtigen Typen? Wo kann ich die nachschlagen? Die F1-Hilfe findet für die Methode nichts.

Viele Grüße

Felix

EWeiss 28. Okt 2017 16:01

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

Welches sind nun die richtigen Typen? Wo kann ich die nachschlagen? Die F1-Hilfe findet für die Methode nichts.
die richtigen sind LONG_PTR

sorge aber dafür das sie auch in der DirectShow9.pas dementsprechend deklariert sind!

gruss

Zacherl 28. Okt 2017 16:11

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

Zitat von FAlter (Beitrag 1384416)
Wo kann ich die nachschlagen?

Für MS APIs/Interfaces, kannst du in der eigentlich als erste Anlaufstelle immer das MSDN konsultieren. Meistens hast du für die C-Typen in Delphi einen gleichnamigen Typ.

Delphi-Quellcode:
LONG
ist auch tatsächlich gleich
Delphi-Quellcode:
Integer
, bloß hast du den Zeiger unterschlagen. Mach mal ein
Delphi-Quellcode:
@
vor die ersten 3 Parameter, dann sollte es ohne weitere Änderungen kompilieren.

EWeiss 28. Okt 2017 16:14

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

Zitat von Zacherl (Beitrag 1384419)
Zitat:

Zitat von FAlter (Beitrag 1384416)
Wo kann ich die nachschlagen?

Für MS APIs/Interfaces, kannst du in der eigentlich als erste Anlaufstelle immer das MSDN konsultieren. Meistens hast du für die C-Typen in Delphi einen gleichnamigen Typ.

Delphi-Quellcode:
LONG
ist auch tatsächlich gleich
Delphi-Quellcode:
Integer
, bloß hast du den Zeiger unterschlagen. Mach mal ein
Delphi-Quellcode:
@
vor die ersten 3 Parameter, dann sollte es ohne weitere Änderungen kompilieren.

Delphi-Quellcode:
var
  hr: HResult;
  iEventCode: integer;
  {$IF CompilerVersion < 25}
  iParam1, iParam2: integer;
  {$ELSE}
  iParam1, iParam2: LONG_PTR;
  {$LEGACYIFEND ON}
  {$IFEND}
Ich arbeite mit dem Kram jetzt schon 3 Monate es ist definitiv LONG_PTR;

Delphi-Quellcode:
  {$HPPEMIT 'typedef System::DelphiInterface<IMediaEvent> _di_IMediaEvent;'}
  {$EXTERNALSYM IMediaEvent}
  IMediaEvent = interface(IDispatch)
    ['{56A868B6-0AD4-11CE-B03A-0020AF0BA770}']
    (*** IMediaEvent methods ***)
    function GetEventHandle(out hEvent: OAEVENT): HResult; stdcall;
    function GetEvent(out lEventCode: Longint; out lParam1, lParam2: Long_ptr;
        msTimeout: DWORD): HResult; stdcall;
    function WaitForCompletion(msTimeout: DWORD; out pEvCode: Longint):
        HResult; stdcall;
    function CancelDefaultHandling(lEvCode: Longint): HResult; stdcall;
    function RestoreDefaultHandling(lEvCode: Longint): HResult; stdcall;
    function FreeEventParams(lEvCode: Longint; lParam1, lParam2: Longint):
        HResult; stdcall;
  end;
gruss

FAlter 28. Okt 2017 16:17

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

also heißen sie wie im MSDN, danke, hätte jetzt erwartet, dass ich das "übersetzen" muss in einen Delphi-"Pointer". Nein, ein @ gehört nicht davor, das sind VAR/OUT-Parameter die Pointer zurückgeben (daher hatte ich es mit "Pointer" probiert). Im MSDN gibt es kein var/out, daher sind es dort Pointer bzw. Pointer auf Pointer, aber VAR ist intern auch ein Pointer, nur Delphi ist so nett es sprachlich zu unterstützen.

Was ich nicht verstehe ist wieso mir angezeigt wird, dass long_ptr ein Integer sei aber Integer nicht akzeptiert wird. Ist wohl doch nicht kompatibel... siehe auch nochmal Screenshot. Ich darf mich wohl nicht auf die Popups verlassen...

Die DirectShow9 habe ich nur als DCU da bei der Starter die ich gerade ausprobiere keine Sourcen dabei sind. Daher kann ich nicht schauen - und Ändern kommt ohnehin nicht in Frage, wenn dann Bugreport und Ändern lassen, sind ja Dateien von Embarcadero und nicht von mir.

(Nachdem ich langsam meine Dateien mit per Turbo Delphi erzeugten Programmen nicht öffnen kann da diese Unicode nicht so gut unterstützen probiere ich gerade eine neue aus. Ob sich ein Kauf der Professional für meine rein private und inzwischen eher seltene Nutzung lohnt habe ich noch nicht entschieden.)

Viele Grüße

Felix

EWeiss 28. Okt 2017 16:24

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

und Ändern kommt ohnehin nicht in Frage, wenn dann Bugreport und Ändern lassen, sind ja Dateien von Embarcadero und nicht von mir.
Seit wann?
Die gehören zum DSPack hat nix mit Embarcadero zu tun.
Nun gut dann kann ich leider nicht weiter helfen.

Habe dir den richtigen weg gezeigt ;)

gruss

Zacherl 28. Okt 2017 17:00

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

Zitat von EWeiss (Beitrag 1384420)
Ich arbeite mit dem Kram jetzt schon 3 Monate es ist definitiv LONG_PTR;

Ja, Korrektur:
Delphi-Quellcode:
LONG_PTR = NativeInt
.

War irgendwie beim MSDN Eintrag für .NET gelandet, wo alle Parameter als
Delphi-Quellcode:
long*
definiert werden.

Zitat:

Zitat von FAlter (Beitrag 1384421)
Nein, ein @ gehört nicht davor, das sind VAR/OUT-Parameter die Pointer zurückgeben (daher hatte ich es mit "Pointer" probiert). Im MSDN gibt es kein var/out, daher sind es dort Pointer bzw. Pointer auf Pointer, aber VAR ist intern auch ein Pointer, nur Delphi ist so nett es sprachlich zu unterstützen.

Wenn sie als
Delphi-Quellcode:
var/out
deklariert sind, kommt natürlich kein
Delphi-Quellcode:
@
davor. Bin davon ausgegangen, dass die Header 1 zu 1 übersetzt worden sind. Einen Pointer geben die Parameter dennoch nicht zurück.
Delphi-Quellcode:
LONG_PTR
ist irreführend. Es handelt sich dabei nicht um einen Zeiger auf
Delphi-Quellcode:
LONG
, sondern den
Delphi-Quellcode:
LONG
Typ, der immer die Größe von
Delphi-Quellcode:
SizeOf(Pointer)
hat.

EWeiss 28. Okt 2017 17:08

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

Ja, Korrektur: LONG_PTR = NativeInt .
yep ;)
Und da hier ein var Parameter voransteht ist man gezwungen LONG_PTR zu verwenden.
Habe mich anfangs auch schwer damit getan, die einzige Lösung war halt es in der DirectShow9.pas selbst zu editieren.
Das Problem war halt das alles mit Madvr und den LavFiltern zu kombinieren.
Jeder kocht irgendwo sein eigenes Süppchen.

gruss

FAlter 28. Okt 2017 17:29

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Hi,

ich habe ja schon danke gesagt, geht ja jetzt.

Aber:
Zitat:

Zitat von EWeiss (Beitrag 1384422)
Zitat:

und Ändern kommt ohnehin nicht in Frage, wenn dann Bugreport und Ändern lassen, sind ja Dateien von Embarcadero und nicht von mir.
Seit wann?
Die gehören zum DSPack hat nix mit Embarcadero zu tun.

Ich habe keinerlei 3rd Party Units verwendet, nur meine eigenen und die von Embarcadero. Die Datei
Code:
C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\win32\release\Winapi.DirectShow9.dcu
liegt Delphi bei. Aber in der Starter ohne Source. Heißt das nun, dass DSPack bereits in compilierter beiliegt?
Indy liegt ja bei obwohl nicht von Embarcadero aber dazu gibt es dann auch den Source.

Viele Grüße

Felix

EWeiss 28. Okt 2017 18:21

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler
 
Zitat:

Zitat von FAlter (Beitrag 1384428)
Hi,

ich habe ja schon danke gesagt, geht ja jetzt.

Aber:
Zitat:

Zitat von EWeiss (Beitrag 1384422)
Zitat:

und Ändern kommt ohnehin nicht in Frage, wenn dann Bugreport und Ändern lassen, sind ja Dateien von Embarcadero und nicht von mir.
Seit wann?
Die gehören zum DSPack hat nix mit Embarcadero zu tun.

Ich habe keinerlei 3rd Party Units verwendet, nur meine eigenen und die von Embarcadero. Die Datei
Code:
C:\Program Files (x86)\Embarcadero\Studio\19.0\lib\win32\release\Winapi.DirectShow9.dcu
liegt Delphi bei. Aber in der Starter ohne Source. Heißt das nun, dass DSPack bereits in compilierter beiliegt?
Indy liegt ja bei obwohl nicht von Embarcadero aber dazu gibt es dann auch den Source.

Viele Grüße

Felix

Im DSPack bei sourceforge liegt alles bei was du so brauchst.
Ich persönlich verwende das DSPack nicht weil das zu aufgebläht ist und nicht das zur Verfügung stellt was ich benötige.
Musste mir auch alles zusammen lesen und selbst verarbeiten.
Das Hauptproblem ist aber das dieses Pack, die Demos davon die Theme ausschaltet und Aero deaktiviert.

Oder!
https://sourceforge.net/projects/delphi-dx9sdk/

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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