Hallo, ich würde gerne einen USB-AD-Wandler auslesen. Dieser wird über die "libadx.ocx" angesprochen. Für Visual Basic ist nachfolgendes Beispielprogramm enthalten. Ich hab die "libadx.ocx" Datei bereits über regsvr32.exe registriert. Jetzt wäre meine Frage, wie kann ich die Funktionen dieser Datei auch in VBA verwenden? Wie initalisiere ich die Datei? Gruß Tobi Object = "{FFE1D535-EC3C-40CF-B51D-A9F23819E524}#1.0#0"; "libadx.ocx" Begin VB.Form MainForm Begin LIBADX.LIBADX LIBADX1 Height = 225 Left = 3840 TabIndex = 2 Top = 600 Width = 240 _Version = 65536 _ExtentX = 423 _ExtentY = 397 _StockProps = 0 End End Option Explicit Const SAMPLES As Integer = 1000 Const PATH As String = "scan1.lfx" Private Sub Start_Click() If Not LIBADX1.Open(Device.Text) Then MsgBox "Konnte Messsystem " & Device.Text & " nicht öffnen" Exit Sub End If Start.Enabled = False '100Hz abtastrate, 1000 samples (= 1 sec.) LIBADX1.ScanPrepare 0.01, SAMPLES 'kanal 1 & 2 speichern LIBADX1.ScanAnalogIn 1, 0 LIBADX1.ScanAnalogIn 2, 0 'Scan durchführen LIBADX1.Scan 'Scan speichern If Not LIBADX1.ScanSave(PATH) Then MsgBox "Messdatei " & PATH & " konnte nicht angelegt werden" Exit Sub End If MsgBox "Scan unter " & PATH & " gespeichert" Start.Enabled = True End Sub
Mahlzeit, prinzipiell ist das möglich, gibt aber eventuell einige Hürden wegen der Datenumwandlung. Möglichkeit 1, du verwendest eine Form in vba, der darfst du auch OCX'n aufpinseln (Steuerelemente), ggf muß dies mittels zusätzliche Steuerelemente deinem Projekt bekannt gemacht werden. Dies währe der leichteste Weg. Vorteil - Eigenschaften/Aufzählungen/Funktionen sind in der Autoverfollständigung enthalten Nachteil - kann Ärger bei neuer OCX (neuerer Version) geben, eventuell lässt sich das Projekt nicht mehr öffnen Möglichkeit 2, dynamisch erstellen, Vorteil : gibt den Versionsärger nicht, ist in allen Modulen einbindbar Nachteil : da es ein dynamisches Objekt ist (late bind), muß man die Funktionen und variablen / parameter kennen. Beispiel Dim oObject As Object set oObject = CreateObject("{FFE1D535-EC3C-40CF-B51D-A9F23819E524}#1.0#0") ' Teilweise haben die auch richtige Namen, eventuell mal in der registry 'nach dem Schlüsselwert suchen ' Name ist meist sowas wie LIBADX.LIBADX1 oder ähnlich ' Createobject erzeugt ein com Objekt mit dem übergebenen Namen bzw. der ID If Not oObject Is Nothing Then oObject.ScanAnalogIn 1, 0 End If set oObject = nothing
Hi Thom, kannst du mehr zu dem Thema sagen, das würde mich auch interessieren? In deinem Beispiel werden ja keine Objekteigenschaften angefasst. Wenn ich jetzt unter VS2008 ein .Net Klassenmodul als OCX erstelle, kann ich das dann als Objekt unter VBA instanzieren? (ist das so richtig ausgedrückt?) Wie sehen die Objekteigenschatfen dann aus? Grüße, Stefan
>In deinem Beispiel werden ja keine Objekteigenschaften angefasst.
Sorry, muss mich korrigieren - du hast ja mit
1 | oObject.ScanAnalogIn 1, 0 |
einen Zugriff auf eine Objekteigenschaft dargestellt. Sind die denn der IntelliSense bekannt?
@Exce(l)ntriker Mal soviel, eine OCX ist eigentlich eine Unterart eines COM Objektes, welche aus Kompatibilitätsgründen noch unterstützt wird, wenn man aber gezielt für neuere Plattformen entwickelt, sollte man sich den Einsatz gut überlegen. Soweit die Teile nun mal vorhanden sind, kann man Sie noch benutzen. Deshalb werden die auch noch in VS2008 unterstützt. Prinzipiell kannst Du deine mit VS2008 (das muß nicht NET sein) erstellte OCX auch in VBA verwenden. Einige Dinge sind aber zu beachten: Variablen / Datenübergaben auf einfache Datentypen beschränken, Long, Double, String, Funktionen eindeutig benennen, auf Überladungen verzichten (kleinster gemeinsamer Nenner gibt die wenigsten Probleme) (Außer er ist ein C Guru, dann gilt das nicht) Nichts komplexes verwenden (nach aussen), da VBA komplexere Daten nicht unterstützt, gilt im wesentlichen für alle Script Sprachen bzw. Interpreter. Die Intellisense funktioniert nur bei early bind, also wenn eine OCX direkt eingebunden wird. Bei komplett dynamischem erstellen kennt Sie die Aufrufe nicht. Zwischenschritt davon kann auch ein einbinden eines Verweises sein, dann kann as Object durch as Type ersetzt werden, ist dann aber auch nicht wirklich mehr dynamisch (Intellisense erkennt dies dann). Hoffe, dies trägt ein wenig zum Verständniss bei.
Hallo Thom,
danke für die Erklärung, die ich sehr gelungen finde.
Eine Frage habe ich aber noch, du schreibst ja:
>das muß nicht NET sein
Ok, ich dachte halt es wäre evtl. sinnvoll da Windows ja seit XP(oder?)
das Framework sowieso mitbringt. Spricht denn was dagegen?
Grüße,
Stefan
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.