mikrocontroller.net

Forum: PC-Programmierung ocx Datei in VBA verwenden


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: thom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Exce(l)ntriker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Exce(l)ntriker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In deinem Beispiel werden ja keine Objekteigenschaften angefasst.

Sorry, muss mich korrigieren - du hast ja mit
    oObject.ScanAnalogIn 1, 0

einen Zugriff auf eine Objekteigenschaft dargestellt. Sind die denn der 
IntelliSense bekannt?

Autor: thom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Exce(l)ntriker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.