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