AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Supports verständnis problem

Ein Thema von EWeiss · begonnen am 30. Mai 2014 · letzter Beitrag vom 30. Mai 2014
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Supports verständnis problem

  Alt 30. Mai 2014, 08:56
Danke.. Aber verstehe immer noch nicht warum alle vergleiche zum gleichen Ergebnis führen.
Was ist falsch und was richtig. Hmmm

In *.Net ist das so einfach und hier so kompliziert verstehen tut man das nicht so recht.

Code:
TryCast(ObjInstance, IWmpEffects)
wenn fertig dann
Code:
TryCast(ObjInstance, IWmpEffects2)
und gut ist.

gruss

Geändert von EWeiss (30. Mai 2014 um 09:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Supports verständnis problem

  Alt 30. Mai 2014, 09:17
Warum sollte das auch nicht gehen?
Delphi-Quellcode:
IWmpEffects = interface( IUnknown )
...
end;

IWmpEffects2 = interface( IWmpEffects )
...
end;

var
  ObjInstance : IUnknown;
  _IWmpEffects : IWmpEffects;
  _IWmpEffects2 : IWmpEffects2;

// Wenn die Referenz in _IWmpEffects das Interface IID_IWMPEffects2 unterstützt
// dann stelle eine Interface-Referenz in _IWmpEffects2, ansonsten NIL
Supports( _IWmpEffects, IID_IWMPEffects2, _IWmpEffects2 );

// Wenn die Referenz in _IWmpEffects das Interface IID_IWMPEffects2 unterstützt
// dann stelle eine Interface-Referenz in ObjInstance, ansonsten NIL
Supports( _IWmpEffects, IID_IWMPEffects2, ObjInstance );

// Wenn die Referenz in _IWmpEffects das Interface IID_IWMPEffects unterstützt
// dann stelle eine Interface-Referenz in ObjInstance, ansonsten NIL
Supports( _IWmpEffects, IID_IWMPEffects, ObjInstance );
es geht ja auch das einfach so
Delphi-Quellcode:
ObjInstance := _IWmpEffects;
// oder
ObjInstance := _IWmpEffects2;
Fraglich ist ja nur, welchen Sinn Supports( _IWmpEffects, IID_IWMPEffects2, ObjInstance ); haben kann. Mit ObjInstance habe ich ja nur die Möglichkeit auf IUnknown zuzugreifen und müsste schon wieder mit Supports prüfen/casten.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (30. Mai 2014 um 09:22 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Supports verständnis problem

  Alt 30. Mai 2014, 09:36
Zitat:
Fraglich ist ja nur, welchen Sinn Supports( _IWmpEffects, IID_IWMPEffects2, ObjInstance ); haben kann. Mit ObjInstance habe ich ja nur die Möglichkeit auf IUnknown zuzugreifen und müsste schon wieder mit Supports prüfen/casten.
Ja der sinn ist halt dieser das ich dann nach dem casten das IWmpEffects löschen kann da nicht mehr gebraucht.
Es gibt aber auch Plugins welche NUR das IWmpEffects verwenden und dann keinen zugriff auf das IWmpEffects2 haben dürfen.

Deshalb muss ich casten.
Mir geht es um den richtigen weg so das ich weis was zugehörig ist und nicht irgend etwas da reinklatsche.


Delphi-Quellcode:
  IWMPEffects = interface(IUnknown)
     ['{D3984C13-C3CB-48e2-8BE5-5168340B4F35}']

    // Render using the rectangle on the normalized device context
    //void Render(ref TimedLevel levels, IntPtr hdc, ref RECT r);
    function Render(var pLevels : TimedLevel; hdc : HDC; var prc : TRect): HRESULT; stdcall;

    // provides the no. channels, sample rate and title of the audio currently playing
    function MediaInfo(lChannelCount : longint; lSampleRate : longint; bstrTitle : WideString): HRESULT; stdcall;

    // called to retrieive the capabilities of the effect (fullscreen? property page?, etc.)
    function GetCapabilities(var pdwCapabilities : longint): HRESULT; stdcall;

    // retrieve the display title of the effect
    function GetTitle(var bstrTitle : WideString): HRESULT; stdcall;

    // retrieve the title for a preset
    function GetPresetTitle(nPreset : LongInt; var bstrPresetTitle : WideString): HRESULT; stdcall;

    // retrieve the number of presets this effect supports
    function GetPresetCount(var pnPresetCount : LongInt): HRESULT; stdcall;

    // set / get the current preset
    function SetCurrentPreset(nPreset : LongInt): HRESULT; stdcall;
    function GetCurrentPreset(var pnPreset : LongInt): HRESULT; stdcall;

    // display the property page of the effect (if there is one)
    function DisplayPropertyPage(hwndOwner : HWND): HRESULT; stdcall;

    // This method will be called when the effect is to start and stop full screen
    // rendering (if supported)
    function GoFullscreen(fFullScreen : BOOL): HRESULT; stdcall;

    // This method will get called after a successful call to GoFullScreen to render
    // the effect. Return failure from this method to signal loss of full screen.
    function RenderFullScreen(var pLevels : TimedLevel): HRESULT; stdcall;
  end;


  IWMPEffects2 = interface(IWMPEffects)
  ['{695386EC-AA3C-4618-A5E1-DD9A8B987632}']
    // Called by Windows Media Player to provide visualization access to the
    // core Windows Media Player APIs.
    function SetCore(var pPlayer : IWMPCore): HRESULT; stdcall;

    // Called by Windows Media Player to instantiate a visualization window
    function Create(hwndParent : HWND): HRESULT; stdcall;

    // Called by Windows Media Player to destroy a visualization window
    // instantiated in the Create method.
    function Destroy: HRESULT; stdcall;

    //Called by Windows Media Player to inform the visualization that a new
    //media item has been loaded.
    function NotifyNewMedia(var pMedia : IWMPMedia): HRESULT; stdcall;

    // Called by Windows Media Player to pass window messages to a visualization.
    function OnWindowMessage(msg : UINT; WParam : WPARAM; LParam : LPARAM;
      var plResultParam : LRESULT): HRESULT; stdcall;

    // Called by Windows Media Player to render a windowed visualization.
    function RenderWindowed(var pData : TimedLevel; fRequiredRender : BOOL): HRESULT; stdcall;
  end;
Mit dem IWmpEffects2 kann ich dann alle Funktionen des IWmpEffects verwenden aber nicht umgekehrt.
Habe da wirklich ein Verständnis Probleme.
Die sich dann verständlicherweise auf Fehler auswirken.

Zitat:
Und bei Kleinerem bekommt man eventuelle Zugriffsverletzungen
Und damit habe ich zu kämpfen da ich nicht weis ob der Zeiger auf das Interface zugehörig ist zum aktuellen Plugin.
Wenn da so ein Kuddelmuddel ist.
Ich glaube wenn ich da irgend etwas einfügen kann und zugriff auf das IWmpEffects2 Interface bekomme ist das sehr kritisch.

Zitat:
Aber function Supports<I: IInterface>(var Intf: I): Boolean; müsste auch funktionieren.
Keine Ahnung ob D2010 das Unterstützt.

gruss

Geändert von EWeiss (30. Mai 2014 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Supports verständnis problem

  Alt 30. Mai 2014, 09:54
Ja das mit dem Casten habe ich in #4 doch mal etwas umgeschrieben und macht doch genau das, was du möchtest mit weniger Code und ohne "um die Ecke" zu gehen.

Es macht doch aber keinen Sinn von etwas Speziellem (IWmpEffects ) auf etwas Universelleres (IUnknown ) zu casten, denn das kann man einfach zuweisen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Supports verständnis problem

  Alt 30. Mai 2014, 10:02
Ja das mit dem Casten habe ich in #4 doch mal etwas umgeschrieben und macht doch genau das, was du möchtest mit weniger Code und ohne "um die Ecke" zu gehen.

Es macht doch aber keinen Sinn von etwas Speziellem (IWmpEffects ) auf etwas Universelleres (IUnknown ) zu casten, denn das kann man einfach zuweisen.
Ja und Danke dafür nochmal.
Um was es mir letztendlich ging ist zu verstehen warum man undefinierten Code eingeben kann/könnte und trotzdem
das IWMPEffects2 zur Verfügung gestellt bekommt.

Siehe Beitrag von himitsu.


gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.983 Beiträge
 
Delphi 12 Athens
 
#6

AW: Supports verständnis problem

  Alt 30. Mai 2014, 09:56
Ich verstehe das Problem leider nicht. Wenn du bei Supports IID_IWMPEffects2 angibst, bekommst du zurück, ob dieses Interface unterstützt wird. Dementsprechend kannst du dann auch damit arbeiten. Und ansonsten setzt du die Interfacereferenz vom Typ IWMPEffects2 auf nil. Genauso mit IWMPEffects. Das as brauchst du überhaupt nicht.

Wenn du nun eine Aktion durchführen willst, die nur von IWMPEffects2 unterstützt wird, musst du nur schauen, ob das Assigned ist...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Supports verständnis problem

  Alt 30. Mai 2014, 09:59
Genauso mit IWMPEffects. Das as brauchst du überhaupt nicht.

Wenn du nun eine Aktion durchführen willst, die nur von IWMPEffects2 unterstützt wird, musst du nur schauen, ob das Assigned ist...
Aber sicher brauche ich das!
Wie kommst du darauf das es nicht nötig wäre?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Supports verständnis problem

  Alt 30. Mai 2014, 10:01
Das as brauchst du überhaupt nicht.
Aber sicher brauche ich das!
Wie kommst du darauf das es nicht nötig wäre?
Siehe Beitrag #4, da wird nirgendwo ein as verwendet und erfüllt die gleiche Funktion
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Supports verständnis problem

  Alt 30. Mai 2014, 10:04
Das as brauchst du überhaupt nicht.
Aber sicher brauche ich das!
Wie kommst du darauf das es nicht nötig wäre?
Siehe Beitrag #4, da wird nirgendwo ein as verwendet und erfüllt die gleiche Funktion

Ahhh sorry ja hab das falsch verstanden dachte er meinte das Interface IWmpEffects

gruss
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:30 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