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