C++ Dll in Labview einbinden - 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: C++ Dll in Labview einbinden (/Thread-C-Dll-in-Labview-einbinden--25551) Seiten: 1 2 |
C++ Dll in Labview einbinden - galilio - 03.03.2014 09:44 Hallo alle zusammen, Ich habe folgende Problem: Ich möchte zwei DLL (File, die von einander abhangig sind) mit Labview einbinden. Diese beide DLL File sind in C++ geschrieben(in Visual Studio 2008). Meine erste Frage: Wie aufwendig ist das denn für jemenden, der keine Erfahrung mit Labview hat? Ich habe Erfahrung nur in C++ bzw. c , Matlab und java. Zweite Frage: Wie soll ich ambesten vorgehen? Danke in voraus RE: C++ Dll in Labview einbinden - RadioactiveMan - 03.03.2014 11:44 Wie aufwendig ist was? Das schreiben der DLL oder das Einbinden? Ich nehme mal an das Einbinden. Das ist einfach. Du musst nur deine Funktionen kennen. Blockdiagramm>Rechtsklick>Konnektivität>Bibliotheken>DLL RE: C++ Dll in Labview einbinden - galilio - 03.03.2014 14:13 Das einbinden in diesem DLL file sind Klassen geht es auch ohne eine Wrapper zu schreiben? RE: C++ Dll in Labview einbinden - rolfk - 03.03.2014 19:43 (03.03.2014 14:13 )galilio schrieb: Das einbinden Nein! Die Call Library Node kann nur globale exportierte C Funktionen einbinden. Grundsatzlich hast Du damit zwei Möglichkeiten. 1) Alle interessanten Objektmethoden wrappen. Das braucht keine seperate DLL zu sein aber kann auch bei der bestehenden DLL beigefügt werden. Etwas in dieser Art: Mit der Klassendefinition wie dieser: Code: class MyClass würde das ungefähr folgenden extra Code geben: Code: extern "C" declspec(dllexport) MyClass* createMyClass(int par) Die MyClass* Parameter (und Returnwerte) bitte in der Call Library Node als Pointer sized Integer konfigurieren, dann geht's sowohl für Windows 32 bit und 64 bit DLLs automatisch korrekt. 2) Den C++ code in ein ActiveX umwandeln und dann als ActiveX Objekt in LabVIEW einbinden. Beachte dass LabVIEW nicht die einzige Prograqmmierumgebung ist bei der Du mit dem Einbinden von C++ Code Probleme hast. C#, Matlab, Delphi und so ziemlich jede andere Programmierumgebung die nicht C++ ist hat hier dieselben Probleme. Eigentlich kann man sagen dass C++ nur wirklich zu sich selber komptibel ist und da sogar nur zu Code das mit dem gleichen Compiler erzeugt wurde, denn es besteht keinerlei binärkompatibler C++ Standard. RE: C++ Dll in Labview einbinden - galilio - 04.03.2014 15:36 @ rolfk Danke für die Antwort. Ich habe noch eine Frage bezogen auf deinem Code, der mir leider nicht so ganz klar Du hast eine Klasse "MyClass" (Header File )wie oben so weit ist alles Okay . den cpp File mir ist nicht so ganz klar. Wie ist dein Konstrukt definiert verstehe ich ehrlich nicht. Kannst du bitte mir noch etwas genauer erklären. Dir danke ich in voraus RE: C++ Dll in Labview einbinden - Kiesch - 04.03.2014 15:55 Im Prinzip lässt du die ganze Zeit C arbeiten und musst dafür irgendwie deine Klasse innerhalb von Labview im Speicher halten. Das heist praktisch: Der erste Codeblock ist einfach nur ein © Wrapper der dir den Konstruktor wrapped. So dass der Labview ne Referenz auf das generierte Objekt weitergibt (die hälst du dann in Labview einfach nur weiter vorrätig). Der Destruktor analog - mit dem Killst du entsprechend dein Objekt wieder nach Beendigung. Das Eigentlich relevante kommt danach: Da Labview nicht mit dem eigentlichen Objekt arbeitet sondern "nur" eine Referenz darauf aufbewahrt musst du außerdem Wrapper für jede einzelne Methode implementieren die die Methode um eine Referenz auf deine Klasse erweitern, damit Labview seine Referenz dieser Wrapper Methode einfach nur übergeben muss. Der Wrapper wendet dann nur die die eigentliche Methode auf das per Referenz übergebene Objekt an und gibt entsprechend Ausgaben raus. Kurz und Bündig: Labview speichert in dem Modell nur das Klassenobjekt zwischen ohne irgendwas mit anfangen zu können / die Datenstruktur interpretieren zu können. Dafür muss das Objekt wieder an die DLL zurückgegeben werden die dafür um entsprechende Wrapper Methoden erweitert werden muss. RE: C++ Dll in Labview einbinden - galilio - 04.03.2014 16:38 ich habe folgende versucht : header File sieht so aus: Code: extern "C" __declspec(dllexport)double Addi(double a, double b); C.File sieht so aus: Code: double Addi(double a, double b) Daraus DLL erstellt und in Labview importiert. Es funktioniert einwandfrei Das ist nur zum Einstieg aber ich möchte C++ DLL file in Labview importieren und komme einfach nihct weiter ich habe das Beispiel von @rolfk (Dafür danke ich dir) einfach mitgenommen und wollte daraus einen DLL zu erstellen. Header File sieht so aus: Code: class MyClass Das Cpp File sieht so aus: Code: #include "StdAfx.h" RE: C++ Dll in Labview einbinden - galilio - 04.03.2014 19:39 Hallo alle zusammen, ich weiss, dass ich mit meine Anfängliche Fragen störe und das dieses Thema mehr fach vorgekommen ist. Mir fehlt es die nötige Erfahrung mit Labview und bin für jeden Tipps sehr dankbar. RE: C++ Dll in Labview einbinden - jg - 04.03.2014 20:01 Du störst nicht, aber: Ball flach halten und nicht drängeln. Bloß weil du 3 h lang keine Antwort erhalten hast, brauchst du den Thread nicht hochpushen. Das darfst du laut LVF-Regeln frühestens nach 24 h. Gruß, Jens RE: C++ Dll in Labview einbinden - galilio - 05.03.2014 07:26 Einen schönen guten Morgen Zusammen, ich bin gestern Abend im Internet auf folgende Seite "http://labviewwiki.org/DLL/shared_library" gestossen. Ich könnte dieses Beispiel bei mir in Visual Studio abbilden und daraus einen DLL erstellen.Dann habe ich in Labview importiert. Es funktioniert alles so weit so gut. Nur mir ist nicht klar wie ich dieses Beispiel in Labview zum laufen bringen? anbei die das Labview datei es fehlt sqrx. vi |