AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectShow: IMediaEvent.GetEvent Syntaxfehler
Thema durchsuchen
Ansicht
Themen-Optionen

DirectShow: IMediaEvent.GetEvent Syntaxfehler

Ein Thema von FAlter · begonnen am 28. Okt 2017 · letzter Beitrag vom 28. Okt 2017
Antwort Antwort
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 15:53
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
Miniaturansicht angehängter Grafiken
bildschirmfoto-28.10.2017-16-46-27.png  
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 16:01
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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 16:11
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.

LONG ist auch tatsächlich gleich Integer , bloß hast du den Zeiger unterschlagen. Mach mal ein @ vor die ersten 3 Parameter, dann sollte es ohne weitere Änderungen kompilieren.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 16:14
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.

LONG ist auch tatsächlich gleich Integer , bloß hast du den Zeiger unterschlagen. Mach mal ein @ 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
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 16:17
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
Miniaturansicht angehängter Grafiken
bildschirmfoto-28.10.2017-17-07-10.png  
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 16:24
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

Geändert von EWeiss (11. Jul 2019 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 17:00
Ich arbeite mit dem Kram jetzt schon 3 Monate es ist definitiv LONG_PTR;
Ja, Korrektur: LONG_PTR = NativeInt .

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

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 var/out deklariert sind, kommt natürlich kein @ davor. Bin davon ausgegangen, dass die Header 1 zu 1 übersetzt worden sind. Einen Pointer geben die Parameter dennoch nicht zurück. LONG_PTR ist irreführend. Es handelt sich dabei nicht um einen Zeiger auf LONG , sondern den LONG Typ, der immer die Größe von SizeOf(Pointer) hat.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 17:08
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
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 17:29
Hi,

ich habe ja schon danke gesagt, geht ja jetzt.

Aber:
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
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: DirectShow: IMediaEvent.GetEvent Syntaxfehler

  Alt 28. Okt 2017, 18:21
Hi,

ich habe ja schon danke gesagt, geht ja jetzt.

Aber:
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

Geändert von EWeiss (28. Okt 2017 um 18:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 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