Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Supports verständnis problem

  Alt 30. Mai 2014, 08:42
Ich erstelle ein Com Objekt auf diese weise.

Delphi-Quellcode:
function TWMPHelper.InitVis(VisGUID: TGuid; PresetIndex: Integer): Bool;
var
  ObjInstance : IUnknown;

begin
  Result := False;

    if CoCreateInstance(VisGUID, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,
      IUnknown, ObjInstance) = S_OK then
    begin
      // Versuch auf IWmpEffects zu casten. Bei einem Fehlschlag,
      // wird Nil zurück gegeben und die ObjInstance
      // unterstützt das Interface IWmpEffects nicht.
      _IWmpEffects := ObjInstance as IWMPEffects;

      if Assigned(_IWmpEffects) then

      // Versuch auf IWmpEffects2 zu casten. Bei einem Fehlschlag,
      // wird Nil zurück gegeben und die ObjInstance
      // unterstützt das Interface IWmpEffects2 nicht.
      if Supports(_IWmpEffects, IID_IWMPEffects2, _IWmpEffects2) then
        _IWmpEffects2 := ObjInstance as IWmpEffects2;

      // wird das Interface IWmpEffects2 unterstützt, brauchen
      // wir das Interface IWmpEffects nicht mehr.
      if Assigned(_IWmpEffects2) then
        _IWmpEffects := nil;

      // Erstes Preset setzen. Das muss sein da es ansonsten bei
      // einigen Visualisierungen zu einer AccessViolation Exception führt.
      SetCurrentPreset(PresetIndex);

      Result := True;
    end;

end;
Wenn ich auf das IWmpEffects2 caste funktioniert es auf verschiedener weise
warum das so ist da komme ich nicht hinter.

Supports(_IWmpEffects, IID_IWMPEffects2, _IWmpEffects2) funktioniert!

aber auch das!
Supports(_IWmpEffects, IID_IWMPEffects2, ObjInstance)

ObjInstance wäre in den fall dann IWmpEffects.

und das geht ebenfalls
Supports(_IWmpEffects, IID_IWMPEffects, ObjInstance) Was mache ich falsch?
Oder warum führen alle Aufrufe zum gleichen Ergebnis?

Sorry gehört zum gleichen Thema..

Kann man CoCreateInstance irgendwo freigeben ?
Denn die eine Visualisierung funktioniert nicht wenn ich nicht vorher CoUninitialize aufrufe.

EDIT:
Hab es nochmal korrigiert.

gruss

Geändert von EWeiss (30. Mai 2014 um 09:02 Uhr)
  Mit Zitat antworten Zitat