Einzelnen Beitrag anzeigen

luki pescoller

Registriert seit: 8. Dez 2009
6 Beiträge
 
Delphi XE7 Professional
 
#1

VCap.QueryInterface 64bit

  Alt 13. Okt 2010, 13:44
Hallo Experten,

ich habe eine funktionierende Anwendung die die Komponente VideoCapture_d6.dprj von Egor Averchenkov nutzt, um von einer Kamera über DirectShow Bilder zu übernehmen. Ich habe diese Komponente um eine Funktion erweitert, die ein zusätzliches Interface des Treibers finden kann, über welches Parameter der Kamera gesteuert werden.

Delphi-Quellcode:
function TVideoCapture.InitMFilter(aGUID: TGUID): boolean;
var
  hr: HRESULT;
begin
  Result := false;
  MFilter := nil; // definiert als Variable von TVideoCapture vom Typ IBaseFilter
  try
    hr := VCap.QueryInterface(aGuid,MFilter);
    Result := succeeded(hr);
  finally
  end;
end;
Das funktioniert unter Windows2000, WindowsXP, Windows Vista und Windows 7 mit 32bit ohne Probleme. Ich kriege den Pointer auf das Interface in MFilter und kann diesen dann auch außerhalb der Komponente ansprechen:

Delphi-Quellcode:
...
  IVideoInterface = interface (IUnknown)
    ['{926ddb19-3c8e-476c-9068-eb4555a99231}'] // GUID
    function SetShutterSpeed(const lShutter : eShutterSpeedCMOS):HRESULT; safecall;
  end;

...
   AGUID := StringToGUID('{926ddb19-3c8e-476c-9068-eb4555a99231}');
   if (gCap.InitMFilter(AGUID)) then begin // gCap vom Typ TVideoCapture
      VideoInterface := gCap.MCOMFilter as IVideoInterface; // definiert
      VideoInterface.SetShutterSpeed(v);
...
auf 64bit Systemen erhalte ich immer die Fehlermeldung (hr) NOINTERFACE

Der Treiber für die Kamere existiert als 32bit und als 64bit Version. Die Bilder werden problemlos auch unter 64bit übertragen, nur das Interface kann ich nicht finden.

hat jemand eine Idee woran das liegen kann?

Danke für eure Hilfe
Gruss
Lukas

Geändert von mkinzler ( 3. Nov 2010 um 20:57 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat