![]() |
USB-Geräte in Delphi(Prism)
Hallo, wollte mal fragen ob es grundsätzlich möglich ist auf USB-Geräte zuzugreifen. Es gibt ja keine universelle Klasse wie bei der seriellen Schnittstelle, da die Funktionsweise eine andere ist. Kann ich Beispielsweise auf das Videobild einer Webcam zugreifen und dieses darstellen? Ich weiß nicht in wie fern ich die USB-Treiber des Geräte dann einbinden müsste? Vielleicht kann mir jemand ein bisschen Hilfe geben oder mir grundsätzlich davon abraten dieses Thema weiter zu verfolgen*G*
|
Re: USB-Geräte in Delphi(Prism)
SUFU: HID-Device
|
Re: USB-Geräte in Delphi(Prism)
Zitat:
|
Re: USB-Geräte in Delphi(Prism)
Hi!
Zitat:
Grüße, Frederic |
Re: USB-Geräte in Delphi(Prism)
Wenn es speziell um Webcams geht, gibt es dafür sicher einige .NET-Wrapper:
![]() Ansonsten gäbe es noch die ![]() |
Re: USB-Geräte in Delphi(Prism)
Zitat:
SUFU: HID-Device |
Re: USB-Geräte in Delphi(Prism)
Bin jetzt auf WIA gestoßen (
![]() wiaVideo = new WiaVideoClass(); wiaVideo.CreateVideoByWiaDevID( wiaDeviceID, window.Handle, 0, 1 ); Hab die Verweise in Delphi wie beschrieben aufgenommen und unter uses eingetragen. WIALib, wiavideolib; Folgenden Code habe ich jetzt method MainForm.button1_Click(sender: System.Object; e: System.EventArgs); var wiavideo:WiaVideoClass; begin wiavideo:=wiaVideo.CreateVideoByWiaDevID('ID',prev iewPanel.handle,0,1); end; Bekomm jetzt den Fehler (PH2) Beste Übereinstimmung "WIAVIDEOLib.WiaVideoClass.CreateVideoByWiaDevID(b strWiaDeviceID: System.String; var hwndParent: WIAVIDEOLib._RemotableHandle; bStretchToFitParent: System.Int32; bAutoBeginPlayback: System.Int32)" passt nicht für Parameter 2, Parameter ist "System.Windows.Forms.Panel" sollte "WIAVIDEOLib._RemotableHandle" sein Ich habe einfach ein Panel zur Vorschau verwendet Und ich weiß nicht wie ich die ID die ein String sein soll herausfinde Wahrscheinlich ist es total logisch, aber ich sehs einfach nicht |
Re: USB-Geräte in Delphi(Prism)
Das Problem wird im Artikel sogar angesprochen, hast du wirklich die Dll daraus genommen?
Zitat:
|
Re: USB-Geräte in Delphi(Prism)
Bin am verzweifeln, der Fehler mit dem falschen Parameter ist weg, aber bring es einfach nicht zum Laufen. Weiß nicht ob WIA mit Prism nicht geht oder woran es liegt.
Code schaut jetzt so aus:
Delphi-Quellcode:
method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);
var wiavideo:WiaVideoClass; begin wiavideo := wiaVideo.CreateVideoByWiaDevID('{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\\0000', panel1.Handle, 0, 1); wiavideo.PreviewVisible := 1; wiavideo.Play; end; Fehlermeldung Fehler 1 (CE15) Typ stimmt nicht überein, <unknown type> kann nicht zu WIAVIDEOLib.WiaVideoClass zugewiesen werden DeviceID stimmt, gleiche ID in C# funktioniert [edit=Phoenix]Delphi-Tags eingefügt. Das nächste mal bitte selber machen. Mfg, Phoenix[/edit] |
Re: USB-Geräte in Delphi(Prism)
Delphi-Quellcode:
CreateVideoByWiaDevID ist eine Methode ohne Rückgabewert.
method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);
begin var video := new WiaVideoClass(); video.CreateVideoByWiaDevID('{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\\0000', panel1.Handle, 0, 1); video.PreviewVisible := 1; video.Play(); end; Du musst erst die Klasse erstellen und dann benutzen... |
Re: USB-Geräte in Delphi(Prism)
Programm startet jetzt ohne Fehler, sobald ich doch auf den Button klicke "Ausnahme von HRESULT: 0x80210015" "COMException wurde nicht vom Benutzercode behandelt" Scheinbar geht diese Komponente nicht unter PRISM. DeviceID stimmt und der Rest sollte auch passen. Muss ich wohl weiter nach einer Libary suchen. Vielleicht kann auch noch jemand was passendes empfehlen. WIA hat mir gefallen, da es in Windows standardmäßig vorhanden ist.
Gruß und ich hoffe das ich eure Nerven nicht so strapaziere |
Re: USB-Geräte in Delphi(Prism)
Zitat:
|
Re: USB-Geräte in Delphi(Prism)
Zitat:
Pack mal das Prism- und das C#-Projekt in ein Archiv und häng es mal hier an. Dann kann ich da mal reinschauen. Ich tippe eher darauf, dass das Library irgendwo mist baut. Ansonsten setz mal einen try-except Block um jede Zeile und fange ab, welche Zeile die Exception erzeugt. Das wäre noch interessant, WO das Ding seine Probleme hat. |
Re: USB-Geräte in Delphi(Prism)
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal das C#, das Prism und das funktionierende C# Beispielprogramm von Codeproject angehängt. Stimmt schon, wenn es in C# läuft, müsste es auch in Delphi laufen. Aber der genannten zwei Zeiler "Video" von (
![]() Grüße |
Re: USB-Geräte in Delphi(Prism)
Hi,
super.. ich hab hier nur Vista und Windows 7 x64 - und dort gibt es nur das WIA 2 library und nicht WIA 1.0. Das heisst, ich kann das so gar nicht testen und müsste die Sache mit WIA2 machen. Bringt Dir im übrigen auch ein Problem ein: Wenn Du WIA1 benutzt funktioniert Deine Anwendung nur auf Rechnern die auch die WIA1 Library haben. Auf Vista und Win 7 macht das dann blöderweise automatisch die Grätsche. Ein weiteres Problem ist, dass ich hier in der VM geilerweise nicht auf die iSight Kameria meines Mac-Hosts zugreifen kann. Ich habe also derzeit kein Video-Gerät. Ich muss die Antwort also leider etwas schieben bis ich meinen Arbeitsplatzrechner aufgestellt habe (bin grad im Umzug, das wird leider noch ein paar Tage dauern). Dort habe ich a) Win XP drauf und b) auch eine Webcam angeschlossen. |
Re: USB-Geräte in Delphi(Prism)
Schonmal danke für die Hilfe, vielleicht hat ja jemand noch ne Idee woran es liegen kann. Hatte die letzten Tage keine Zeit es weiter zu probieren, ab morgen werde ich mich wieder darum kümmern.
|
Re: USB-Geräte in Delphi(Prism)
Ich kämpfe immer noch mit WIA, sehe momentan keine alternative. Ich wäre so dankbar wenn jemand wie beschrieben über die WIAVideoLab testen könnte ob es bei euch funktioniert.
![]() Bei den Beispielcodes funktioniert bei mir lediglich das WiaScriptSample und WiaEasyImage, das interessanteste (WiaEasyVideo) geht bei mir nicht. Gruß |
Re: USB-Geräte in Delphi(Prism)
Hab WIA jetzt soweit am laufen, hab nur noch folgendes Problem bei der Umsetzung von C# in Delphi Prism.
Wie übersetzte ich folgende Zeilen: string selectedID = wiaRoot.GetPropById((WiaItemPropertyId)WiaDeviceIn foPropertyId.DeviceInfoDevId) as string Ich weiß nicht wie ich den davor stehen Datentyp (WiaItemPropertyId) und damit wohl eine Umwandlung des Datentyps (WiaItemPropertyId-> WiaDeviceInfoPropertyId) in Delphi realisiere. Ähnlich hier: string videoDir = (string) wiaRoot.GetPropById((WiaItemPropertyId)3587) Jeweils die Datentypen in Klammer voran gestellt. Was ist der Unterschied zwischen (string) und as string? Vielleicht kann mir jemand einen Tipp geben. Danke |
Re: USB-Geräte in Delphi(Prism)
Zitat:
Code:
Das as in der ersten C#-Codezeile ist wahrscheinlich Unsinn, nimm in Prism einfach beide Male (und sowieso quasi immer) as. Da WiaItemPropertyId etc. wohl Wertetypen sind, sollte es da allerdings keinen Unterschied zwischen den zwei Operatoren geben.
C# Prism Verhalten wenn not (x is T)
(T)x x as T InvalidCastException x as T T(x) null/nil |
Re: USB-Geräte in Delphi(Prism)
Hat funktioniert, Danke :-) Sobald das Projekt abgeschlossen ist werd ich berichten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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