Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism USB-Geräte in Delphi(Prism) (https://www.delphipraxis.net/149401-usb-geraete-delphi-prism.html)

lord-schaschlik 20. Mär 2010 16:54


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*

hathor 20. Mär 2010 17:09

Re: USB-Geräte in Delphi(Prism)
 
SUFU: HID-Device

Lumpiluk 20. Mär 2010 18:15

Re: USB-Geräte in Delphi(Prism)
 
Zitat:

Es gibt ja keine universelle Klasse wie bei der seriellen Schnittstelle
Zu dem Thema kann ich leider nicht viel sagen, aber steht USB nicht für Universal Serial Bus?

fkerber 20. Mär 2010 18:26

Re: USB-Geräte in Delphi(Prism)
 
Hi!

Zitat:

Zitat von hathor
http://www.delphipraxis.net/search.php?search_id=1589959615&start=0

Leider kannst du so nicht auf ein Suchergebnis verlinken - sag uns am besten wonach du gesucht hast ;)


Grüße, Frederic

Khabarakh 21. Mär 2010 00:29

Re: USB-Geräte in Delphi(Prism)
 
Wenn es speziell um Webcams geht, gibt es dafür sicher einige .NET-Wrapper: http://stackoverflow.com/questions/2...cam-usage-in-c
Ansonsten gäbe es noch die #usblib.

hathor 21. Mär 2010 07:53

Re: USB-Geräte in Delphi(Prism)
 
Zitat:

Zitat von fkerber
Hi!

Zitat:

Zitat von hathor
http://www.delphipraxis.net/search.php?search_id=1589959615&start=0

Leider kannst du so nicht auf ein Suchergebnis verlinken - sag uns am besten wonach du gesucht hast ;)


Grüße, Frederic

Sorry, wahrscheinlich ist der Link nur einige Stunden gültig!

SUFU: HID-Device

lord-schaschlik 22. Mär 2010 18:26

Re: USB-Geräte in Delphi(Prism)
 
Bin jetzt auf WIA gestoßen (http://www.codeproject.com/KB/dotnet...ingdotnet.aspx). Die Komponente ist in Windows enthalten und sollte in delphi Prism problemlos laufen. Die C# Samples funktionieren auch, so wie ich mir das vorstelle. Laut den oberen Link werden nur folgende Anweisungen benötigt:

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

Khabarakh 22. Mär 2010 23:28

Re: USB-Geräte in Delphi(Prism)
 
Das Problem wird im Artikel sogar angesprochen, hast du wirklich die Dll daraus genommen?
Zitat:

Unfortunately, the embedded TLB has a bug for methods passing a window handle. I used ILDASM to get the IL code of the interop assembly, then I changed all incorrect occurances of 'valuetype _RemotableHandle&' to 'native int', then finally compiled back to an assembly with ILASM. This repaired DLL is included in the download as WIAVIDEOLib.dll.

lord-schaschlik 23. Mär 2010 17:31

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]

Phoenix 23. Mär 2010 17:52

Re: USB-Geräte in Delphi(Prism)
 
Delphi-Quellcode:
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;
CreateVideoByWiaDevID ist eine Methode ohne Rückgabewert.
Du musst erst die Klasse erstellen und dann benutzen...

lord-schaschlik 23. Mär 2010 20:57

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

Khabarakh 23. Mär 2010 23:07

Re: USB-Geräte in Delphi(Prism)
 
Zitat:

Zitat von lord-schaschlik
Scheinbar geht diese Komponente nicht unter PRISM.

Sinnvolleres kann ich dazu leider auch nicht beitragen, aber eins steht fest: Wenn das unter C# läuft, dann muss es das auch unter Prism :) .

Phoenix 24. Mär 2010 07:32

Re: USB-Geräte in Delphi(Prism)
 
Zitat:

Zitat von lord-schaschlik
Programm startet jetzt ohne Fehler, sobald ich doch auf den Button klicke "Ausnahme von HRESULT: 0x80210015" "COMException wurde nicht vom Benutzercode behandelt"

Wenns unter C# geht, gehts auch in Prism. IL ist IL und .NET ist .NET.

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.

lord-schaschlik 24. Mär 2010 14:49

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 (http://www.codeproject.com/KB/dotnet...ingdotnet.aspx) reicht wohl nicht aus. Weiß nicht was mir noch fehlt. Die WIALib wurde von Windows verwendet. Die WIAVideoLib hab ich aus dem Beispielprogramm kopiert und in die Ordner eingefügt.

Grüße

Phoenix 24. Mär 2010 18:10

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.

lord-schaschlik 29. Mär 2010 12:44

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.

lord-schaschlik 31. Mär 2010 17:48

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.
http://www.codeproject.com/KB/dotnet...ingdotnet.aspx
Bei den Beispielcodes funktioniert bei mir lediglich das WiaScriptSample und WiaEasyImage, das interessanteste (WiaEasyVideo) geht bei mir nicht.

Gruß

lord-schaschlik 10. Apr 2010 09:33

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

Khabarakh 10. Apr 2010 11:07

Re: USB-Geräte in Delphi(Prism)
 
Zitat:

Zitat von lord-schaschlik
und damit wohl eine Umwandlung des Datentyps (WiaItemPropertyId-> WiaDeviceInfoPropertyId) in Delphi realisiere.

Nunja, durch einen Cast? Prism und C# haben hier allerdings etwas... interessante Beziehungen.
Code:
C#      Prism  Verhalten wenn not (x is T)
(T)x   x as T InvalidCastException
x as T T(x)   null/nil
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.

lord-schaschlik 10. Apr 2010 14:23

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 12:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz