Hallo zusammen, ich muß eine vor Jahren von mir in VisualBasic 6 erstellte Steuerung mit Visual Studio Express 2013 neu aufrollen. Darin nutze ich natürlich wieder Visual Basic, kann nix anderes. Habe das USB-A/D-Wandlermodul HB628 auf meinem Win 7 64bit Rechner angeschlossen und Treiber installiert. Habe versucht, die HB628-dll in meinem Projekt als Referenz hinzuzufügen - da meckert VisualStudio: sinngemäß "Reference could not be added. Make sure the file is accessible and a valid assembly or COM component" Dann habe ich mir gedacht, das Ding ist doch ein virtueller COM-Port und das Protokoll simpel. Also im Projekt einfach einen SerialPort hinzugefügt, geöffnet, 3Byte-Sequenzen hinschreiben und 3Byte-Srquenzen zurückbekommen, funktioniert. Die Frage, wozu brauche ich dann überhaupt das DLL-Brimborium? Kann mir da jemand einen guten Grund nennen - und dann auch, wie ich die DLL ins Projekt bringe? Viele Grüße Tom.
TomHeike schrieb: > Die Frage, wozu brauche ich dann überhaupt das DLL-Brimborium? Hängt davon ab, was die DLL so treibt. Gibt es von der 'ne Beschreibung?
Ich glaube keine Beschreibung, aber natürlich die Deklarationen zu den enthaltenen Funktionen im Beispielprogramm. Bin allerdings morgen nicht im Büro, und werde wohl nicht online nach den auf CD mitgelieferten Dateien suchen. Wird also Montag mit meiner Antwort...
TomHeike schrieb: > Darin nutze ich natürlich wieder Visual Basic Nein, Du benutzt Visual Basic .NET ... http://de.wikipedia.org/wiki/Visual_Basic_.NET Was bedeutet, dass > Habe versucht, die HB628-dll in meinem Projekt als Referenz hinzuzufügen > - da meckert VisualStudio: > sinngemäß "Reference could not be added. Make sure the file is > accessible and a valid assembly or COM component" Du so direkt nur .NET-Dlls (das ist in diesem Fall mit Assembly gemeint) und COM-Dlls in Deinem Projekt verwenden kannst. > wie ich die DLL ins Projekt bringe? - Platform Invoke (P/Invoke). - C++/CLI-Komponente als Layer zwischen der DLL und Deinem Programm. - Das ganze Programm in ("nativem") C++ schreiben - inkl. der Verwendung einer GUI-Bibliothek - und die DLL einfach benutzen. Sollte sich in der DLL nichts allzu Kompliziertes befinden, wäre SerialPort aber wohl die einfachste Lösung (es sei denn, die Parameter der Funktionen sind relativ trivial und P/Invoke damit keine übermäßige Fummelei).
Also, ich hab mir nochmal das Beispielprogramm für VisualBasic angesehen. Scheint bei VB6 stehengeblieben zu sein. So weit meine ich die Unterscheide zwischen der alten VB-Welt und der .NET-Welt schon zu kennen. Ok, ich benutze Visual Basic .NET. Weiter oben wurde nach dem Inhalt der DLL gefragt, ich kann wie gesagt nur mit dem .bas-Modul des alten VB6-Beispielprogrammes dienen, in dem die DLL-Funktionen deklariert sind:
1 | Attribute VB_Name = "HB628_Module" |
2 | Option Explicit |
3 | |
4 | ' Declare statements for all the functions in the HB628.dll |
5 | ' NOTE: These statements assume that the DLL file is located in |
6 | ' the same directory as this project. |
7 | ' If you change the location of the DLL, be sure to change the location |
8 | ' in the declare statements also. |
9 | Public Declare Function HB628_Open Lib "hb628.dll" (ByVal ComPort As Byte, ByVal Timeout As Long) As Boolean |
10 | Public Declare Function HB628_Close Lib "hb628.dll" () As Boolean |
11 | Public Declare Function HB628_Read_Channel Lib "hb628.dll" (ByVal Channel As Byte, ByRef Result As Integer, ByRef Error As Byte) As Boolean |
12 | Public Declare Function HB628_Read_All_Channel Lib "hb628.dll" (ByRef Result_Array As Integer, ByRef Error As Byte) As Boolean |
13 | Public Declare Function HB628_Set_Digital_Output Lib "hb628.dll" (ByVal Channel As Byte, ByVal Value As Byte, ByRef Error As Byte) As Boolean |
14 | Public Declare Function HB628_Set_All_Digital_Output Lib "hb628.dll" (ByVal Value As Byte, ByRef Error As Byte) As Boolean |
15 | Public Declare Function HB628_Set_TimeOut Lib "hb628.dll" (ByVal Value As Byte, ByRef Error As Byte) As Boolean |
16 | |
17 | |
18 | 'Errors |
19 | Public Const Err_No = 0 'no error |
20 | Public Const ERR_TX = 1 'Tx error |
21 | Public Const ERR_RX = 2 'Rx error |
22 | Public Const ERR_CS = 3 'control sum error |
23 | Public Const ERR_PARAM = 4 'parameters value error |
Die Frage ist aber wirklich, brauch ich diese DLL. Macht die überhaupt etwas anderes/tiefergehendes, als die nötigen 3-Byte-Sequenzen zum Senden zu erzeugen und die 3-Byte-Antwort abwarten, low- und hibyte zusammenschrauben und Prüfsumme kontrollieren. Sowas kann ich mir mittlerweile selbst als Funktionen oder gar class schreiben, ist ja echt kein Hexenwerk, sondern einfach eine kleine Fleißaufgabe. Muß ich mir halt einen SerialPort als Steuerelement ins Projekt holen, aber was ist daran schlimm oder unprofessionell? Hier mal der Codeschnipsel, der (ohne Prüfsumme und Timeout) den A/D-Kanal 1 liest:
1 | HB628.Write("c01") |
2 | While HB628.BytesToRead < 3 |
3 | End While |
4 | HiByte = HB628.ReadByte |
5 | LoByte = HB628.ReadByte |
6 | CheckSum = HB628.ReadByte |
7 | EngUnits = 256 * HiByte + LoByte |
HB628 ist der Name, den ich dem SerialPort gegeben habe. Es gibt einen anderen, älteren Thread, in dem jemand eine c#-class vorstellt, welche wohl die alte DLL "umhüllt" und zugänglich macht. Hat mir aber nichts gebracht, weil a) in c# statt VB und b) nach meinem Wissenstand zu umständlich/unverständlich. Viele Grüße Tom.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.