Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Exception bei capCreateCaptureWindowA...? (https://www.delphipraxis.net/137856-exception-bei-capcreatecapturewindowa.html)

LDericher 29. Jul 2009 20:52


Exception bei capCreateCaptureWindowA...?
 
Ich benutze folgenden Code, um mit meiner Anwendung auf die bei mir angeschlossene Webcam zuzugreifen:

Delphi-Quellcode:
Procedure ConnectWebcam(WebcamIndex: integer);
begin
  CaptureWindow := capCreateCaptureWindowA('CaptureWindow', WS_CHILD or
    WS_DISABLED, 0, 0, 0, 0, GetDesktopWindow, 0);
  isConnected := (CaptureWindow <> 0) and
    (SendMessage(CaptureWindow, WM_CAP_DRIVER_CONNECT, WebcamIndex, 0) <> 0)
end;
Funktioniert auch wunderbar, wenn ichs kompiliere und ausm Explorer->Doppelklick starte.

Das Problem ist, dass die erse Zeile der Prozedur eine "externe Exception C0000008" wirft, solange ich das ganze im Delphi-Umfeld ausführe.

Hat irgendwer schonmal ähnliche Probleme gehabt?

Danke schonmal,

Euer LDer.

toms 29. Jul 2009 21:00

Re: Exception bei capCreateCaptureWindowA...?
 
Hallo

Wie sieht die Deklaration von capCreateCaptureWindowA aus?

Ich habe das Beispiel von der Code-Library probiert. Funktioniert ohne Probleme bei mir.

LDericher 29. Jul 2009 21:04

Re: Exception bei capCreateCaptureWindowA...?
 
Meine sieht so aus:

Delphi-Quellcode:
function capCreateCaptureWindowA(lpszWindowName: PChar; dwStyle: dword;
  x, y, nWidth, nHeight: word; ParentWin: dword; nId: word): dword;
  stdcall external 'AVICAP32.DLL';
Aber mit der Variante in deinem Link:

Delphi-Quellcode:
function capCreateCaptureWindow(lpszWindowName: LPCSTR;
  dwStyle: DWORD;
  x, y,
  nWidth,
  nHeight: integer;
  hwndParent: HWND;
  nID: integer): HWND; stdcall;
  external 'AVICAP32.DLL' name 'capCreateCaptureWindowA';
Ist es das Gleiche...

Kann's an meiner DLL-Version liegen? Könnt'st'e deine vllt. mal anhängen?

LDer.

LDericher 29. Jul 2009 21:10

Re: Exception bei capCreateCaptureWindowA...?
 
Mit einer "neuen" AVICAP32 von dll-files.com besteht das gleiche Problem...

LDericher 30. Jul 2009 11:39

Re: Exception bei capCreateCaptureWindowA...?
 
Hab eigentlich nur ICH ständig unlösbare Probleme oder ist das hier normal? :freak:

Medium 31. Jul 2009 12:17

Re: Exception bei capCreateCaptureWindowA...?
 
Hier habe ich zumindest mal diese Aussage gefunden:
Zitat:

In NT4.0 anything that is being debugged with any debugger will cause the OS to report exceptions that would otherwise be ignored. "External Exception C0000008" one of those types of errors.
Das scheint dann wohl auch auf NT > 4 zuzutreffen. Was man daraus nun aber nur mitnehmen kann ist: Die Exception tritt immer auf, wird aber nur beim Debuggen als solche moniert. Eine Lösung ist's leider nicht :(

Edit: Ich hab nach ein wenig Lesen nur noch heraus bekommen, dass dieser Fehler in zwei Zusammenhängen aufgetaucht ist:
1) Bei Verwendung korumpierter Thread-Handles (war ein C++ Problem)
2) Bei ActiveX/COM Objekten. Insbesondere gab es einen Fall, in dem ein in VB geschriebenes ActiveX in Delphi benutzt o.g. Fehler hervorgerufen hat, in einem VB Programm hingegen nicht. Ich vermute stark, dass hier auf Umwegen irgendwo auf ein COM/AX zugegriffen wird, und dieses dann knallt. D.h. die DLL selbst muss nicht einmal schuld sein, auch dein Programm nicht unbedingt. Eine besonders schöne Aussicht ist das nun aber auch wieder nicht :?

Edit2: Und noch was falls es hilft: Der "Klartext" zu dem Errorcode scheint "STATUS_INVALID_HANDLE" zu sein. Fall 1 von oben spricht dafür, aber auch in COM wird viel mit Handles umher geworfen. Leider recht unspezifisch so. Hier gabs den Fehler mal in Verbindung mit SQL, und verantwortlich war hier auch wohl das letzte Glied in der Kette. Ebenso scheint es, laut einiger Forenthreads die ich so gefunden habe, Versionen von Sybase zu geben die diesen Fehler hervorrufen, und auch dort lag der Fehler nie in der Hand des armen "anwendenden" Programmierers. U.U. hilft es bei dir ja, wenn du neue Treiber für das Video-Subsystem nimmst. Falls es sowas vom Hersteller gibt...

Medium 31. Jul 2009 12:56

Re: Exception bei capCreateCaptureWindowA...?
 
Edit3: Lösung!
Bzw. Workaround, aber da die Funktionalität ja gegeben ist, kannst du so wenigstens wieder debuggen.

Menü: Tools -> Debugger Optionen -> Reiter: BS Exceptions -> In der Liste "Ungültiges Handle ($C0000008)" auswählen -> Mit den Radioboxen mal rumspielen welches davon das Anhalten verhindert.

Unter non-D7 heissen die Optionen evtl. etwas anders.

Aus dieser Quelle abgeleitet (1. Frage).

(Sorry für's "Push-Posten", das Edit kam 3 mal nicht durch.)

LDericher 31. Jul 2009 15:45

Re: Exception bei capCreateCaptureWindowA...?
 
WOW

vielen dank, Da hatte ich auch schon gesucht aber nix gefunden x)

Dankeeeeeeee!!!!!

*freu*

LDer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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 by Thomas Breitkreuz