Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   VCap.QueryInterface 64bit (https://www.delphipraxis.net/155221-vcap-queryinterface-64bit.html)

luki pescoller 13. Okt 2010 13:44


VCap.QueryInterface 64bit
 
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

Assarbad 26. Okt 2010 20:50

AW: VCap.QueryInterface 64bit
 
Zitat:

Zitat von luki pescoller (Beitrag 1055582)
hat jemand eine Idee woran das liegen kann?

MSDN-Library durchsuchenRegistry Reflection vielleicht? Würde ich mal annehmen, daß du da die falsche Einstellung innerhalb deines Programms benutzt. Kannst ja nur die 32bit-DLL (Filter) benutzen innerhalb deines WOW64-Prozesses.

luki pescoller 27. Okt 2010 09:06

AW: VCap.QueryInterface 64bit
 
Danke für die Antwort,
habe das Problem gelöst, läuft jetzt auch auf 64bit.

Während auf 32Bit Systemen eine Installation des Kameratreibers über die .INF des Herstellers funktioniert, reicht das bei 64bit offensichtlich nicht aus. Es gibt vom Hersteller dazu eine Setup Programm, welches allerdings noch eine Demosoftware installiert. Die Installation dieser Demo Software wollte ich eigentlich vermeiden.

Das Setup Programm installiert offensichtlich unter 64bit etwas, was nicht in der INF angegeben ist.

Einstweilen muss ich eben mit der Installation der Demo Software leben.

Gruss
Lukas

Assarbad 27. Okt 2010 10:13

AW: VCap.QueryInterface 64bit
 
Zitat:

Zitat von luki pescoller (Beitrag 1058053)
Das Setup Programm installiert offensichtlich unter 64bit etwas, was nicht in der INF angegeben ist.

Bzw. schaltet MSDN-Library durchsuchenRegistry Reflection ein ... ;)

Assarbad 3. Nov 2010 20:55

AW: VCap.QueryInterface 64bit
 
Ähem, würdest du deine Frage dann auch noch als beantwortet markieren?! Sie ist noch als offen markiert.

luki pescoller 4. Nov 2010 10:16

AW: VCap.QueryInterface 64bit
 
ok. Danke noch mal.
lukas


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 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