LabVIEWForum.de
DLL einbinden mittels Wrapper - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: DLL einbinden mittels Wrapper (/Thread-DLL-einbinden-mittels-Wrapper)

Seiten: 1 2


DLL einbinden mittels Wrapper - OXO - 28.04.2013 17:09

Hallo liebe LabView-Gemeinde,

bisher habe ich mich ausschließlich lesend im Forum beteiligt aber ich stehe vor einem Problem, bei dem ich auf eure Hilfe hoffe. Ich habe schon einige, auch komplexe Applikationen in LV erstellt, stehe nun aber vor einem Problem; dem Einbinden einer DLL in Labview. Ich habe schon vieles zu diesem Thema hier im Forum und auf der NI-Seite gelesen, so ganz schlau bin ich allerdings noch nicht daraus geworden.

Es geht um folgendes, ich möchte mittels COM Objekt mit einer Hardware kommunizieren. Hierfür habe ich die Hersteller SDK mit den DLL Libaries erhalten, allerdings ohne Header (.h) Datei, dafür aber mit einer ausführlichen Dokumentation der einzelnen Funktionen (Parameter, Rückgabewerte usw). Beispielhaft sei im Folgenden mal eine dargestellt: HRESULT GetLastErrorText([out, retval] BSTR* ErrorText )

Ich gehe davon aus, dass ich einen Wrapper verwenden muss, da es sich bei BSTR* um einen Pointer handelt aber wie hat der Wrapper auszusehen? Hat jemand von euch mal einen Wrapper erstellt und kann mir das Grundgerüst zur Verfügung stellen oder mir hilfreiche Tipps geben?

Oder irre ich mich und ich muss keinen Wrapper nutzen?

Vielen Dank im Voraus
OXO


RE: DLL einbinden mittels Wrapper - OXO - 28.04.2013 19:10

Der Titel meines Beitrags ist wirklich bescheiden gewählt, sorry Angel_not


RE: DLL einbinden mittels Wrapper - rolfk - 28.04.2013 19:48

(28.04.2013 17:09 )OXO schrieb:  Oder irre ich mich und ich muss keinen Wrapper nutzen?

Das hängt sehr stark davon ab was Deine COM Objekte zur Verfügung stellen. Wenn das wirklich pure COM Objekte sind dann führt kein Weg an einer Wrapper DLL vorbei. Aber COM ist die Basis von ActiveX und wenn Deine DLLs ein ActiveX Interface zur Verfügung stellen dann kannst Du ganz einfach die LabVIEW ActiveX Funktionen verwenden um diese Komponente aufzurufen.

Versuche mal eine ActiveX Refnum auf das Frontpanel zu legen und dann mit Browse im Rechtsklickmenu Deine DLL anzuwählen. Wenn Sie ein ActiveX Interface hat wird LabVIEW das merken.


RE: DLL einbinden mittels Wrapper - OXO - 28.04.2013 20:15

Vielen Dank für die abgefahren schnelle Hilfe Yourock

Da ich im Moment (ich hoffe das ändert sich bald) noch ziemlich unsicher mit der ganzen COM/ActiveX Materie bin, erkläre ich dir genau was ich gemacht habe und welche Optionen LabView mir nun zur Verfügung stellt. Vielleicht hilft das ja später auch anderen, die ähnliche Probleme haben.

Ich habe eine ActiveXReferenz erzeugt und und in der Typbibliothek meine dll ausgewählt. Als Objekte werden mir die entsprechenden Objekte der dll angezeigt.
Ist das ein hinreichendes Indiz dafür, dass ich keinen Wrapper brauche?


RE: DLL einbinden mittels Wrapper - OXO - 28.04.2013 20:34

Ich habe jetzt mal versucht, eine beliebige andere dll zu laden (gehört nicht zum SDK). Beim Versuch erschien eine Fehlermeldung "Die ausgewählte Datei ist keine .Net-Assembly, Typenbibliothek oder Automations-EXE."
Das macht mir Mut, denn die dll aus dem SDK hat diesen Fehler nicht ausgegeben.

Trotzdem verstehe ich noch nicht so wirklich, wie ich mit dem Datentyp BSTR* o.ä. umgehen soll.
Ach eine Sache fällt mir noch ein, ein weiterer vorkommenden Datentyp ist IComponent. So nun warte ich erstmal auf Antwort, bevor ich meinen Tread total zu spamme.


RE: DLL einbinden mittels Wrapper - rolfk - 28.04.2013 22:46

(28.04.2013 20:34 )OXO schrieb:  Ich habe jetzt mal versucht, eine beliebige andere dll zu laden (gehört nicht zum SDK). Beim Versuch erschien eine Fehlermeldung "Die ausgewählte Datei ist keine .Net-Assembly, Typenbibliothek oder Automations-EXE."
Das macht mir Mut, denn die dll aus dem SDK hat diesen Fehler nicht ausgegeben.

Trotzdem verstehe ich noch nicht so wirklich, wie ich mit dem Datentyp BSTR* o.ä. umgehen soll.
Ach eine Sache fällt mir noch ein, ein weiterer vorkommenden Datentyp ist IComponent. So nun warte ich erstmal auf Antwort, bevor ich meinen Tread total zu spamme.

Schliesse mal eine Property Node oder Method Node an die Refnum. Mit den Parameterdatentypen hast Du nichts zu tun, das macht LabVIEW dann für Dich. Für einen BSTR Parameter generiert LabVIEW automatisch einen String Parameter.


RE: DLL einbinden mittels Wrapper - OXO - 29.04.2013 05:20

Das werde ich nachher probieren und berichten, vielen Dank.


RE: DLL einbinden mittels Wrapper - OXO - 29.04.2013 05:57

Eine Frage fällt mir noch ein, muss ich bei COM Schnittstellen gar nicht das VI Knoten zum Aufruf externer Bibliotheken nutzen? Ich bini davon ausgegangen, dass DLL-Funktionen über dieses VI aufgerufen werden.

Viele Grüße und einen schönen Start in den Tag!


RE: DLL einbinden mittels Wrapper - jg - 29.04.2013 08:58

Richtig erkannt, bei einer ActiveX oder .NET Schnittstelle machst du alles über Eigenschaften und Methoden des Objekts, den DLL-Knoten brauchst du nicht.

Gruß, Jens


RE: DLL einbinden mittels Wrapper - OXO - 29.04.2013 09:13

Bisher war ich nie ein großer Freund von .net aber das ändert sich so langsam. In Kombination mit LV scheint das (im Moment zumindest) recht gut zu klappen. Ich werde weiter testen und berichten.

Viele Grüße!