LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

C++ Library einbinden

Hallo,
 
ich habe ein paar DLL-Dateien und möchte diese von LabVIEW aus mit dem "Knoten zum Aufruf externer Bibliotheken" VI aufrufen. Die DLL-Dateien sind in C++ geschrieben und es gibt dazu eine C++ Bibiliothek (.lib). Um die DLLs nutzen zu können muss ich irgendwie die .lib Datei einbinden. Wie kann man dies unter LabVIEW machen?
 
Gruß Dusan
0 Kudos
Message 1 of 4
(9,758 Views)

Hallo Dusan,

anbei ist ein Link, der beschreibt wie man externen Code in LV verwendet. Du musst das PDF Dokument im Link herunterladen.

http://digital.ni.com/manuals.nsf/websearch/8D930295FFBF9F7686256D2C00624728

Gruß ThomasD

0 Kudos
Message 2 of 4
(9,751 Views)

Hallo Thomas,

die Dokumentation habe ich mir davor schon ein paar mal angeschaut aber es steht nirgends beschrieben, wie man unter LabVIEW eine .lib (C++ Library) Datei einbinden kann. Es ist nur beschrieben wie eine DLL-Datei einzubinden ist und das habe ich schon versucht, ohne Erfolg, denn für meinen Zugriff ist die .lib Datei erforderlich damit alle erforderlichen Sachen geladen werdne können. Was kann ich nun da machen?

Gruß Dusan

0 Kudos
Message 3 of 4
(9,747 Views)
In LabVIEW bindet man keine .lib Datei ein. Man konfiguriert die Call Library Node dahingehend um die aus der DLL exportierten Funktionen direkt dynamisch aufzurufen.  Das hat aber bei C++ generierten DLLs meist einige Haken und Ösen.

Zuerst einmal dekoriert jeder C++ Compiler normalerweise alle Funktionen, aber jeder C++ Compiler tut dies wieder anders. Zweitens können Objektmethoden in LabVIEW nicht so direkt aufgerufen werden, da diese meist mit der sogenannten __thiscall calling convention exportiert sind, die den Objektpointer im EC Register übergibt und nicht auf dem Stack.

In diesem Fall ist eigentlich die einzige sinnvolle Möglichkeit eine weitere Wrapper-DLL zu schreiben, die mit der von Dir erwähnten .lib gelinkt wird, und alle benötigten Funktionen als Standard C Funktionen entweder als __stdcall oder __cdecl exportiert. LabVIEW hat kein direktes objektorientiertes C Interface und das wäre auch niemals binärkompatibel zu halten, da jeder Compiler seine eigenen Ideen hat, wie Objekte und Objektmethoden gelinkt werden sollen. So geht es zum Beispiel noch nicht einmal ohne enorme Bein- und Armverrenkungen, um Borland C Libraries mit Visual C Programmen zu linken, obwohl dies beides C(++) Compiler sind.

Rolf Kalbermatter

Message Edited by rolfk on 10-05-2005 10:31 AM

Rolf Kalbermatter  My Blog
DEMO, Electronic and Mechanical Support department, room 36.LB00.390
0 Kudos
Message 4 of 4
(9,737 Views)