INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

C++ Dll in Labview einbinden



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

03.03.2014, 09:44
Beitrag #1

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
C++ Dll in Labview einbinden
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.03.2014, 11:44
Beitrag #2

RadioactiveMan Offline
LVF-Grünschnabel
*


Beiträge: 48
Registriert seit: Apr 2013

2012
2012
DE



RE: C++ Dll in Labview einbinden
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2014, 14:13
Beitrag #3

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: C++ Dll in Labview einbinden
Das einbinden



in diesem DLL file sind Klassen geht es auch ohne eine Wrapper zu schreiben?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2014, 19:43 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2014 19:53 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: C++ Dll in Labview einbinden

Akzeptierte Lösung

(03.03.2014 14:13 )galilio schrieb:  Das einbinden



in diesem DLL file sind Klassen geht es auch ohne eine Wrapper zu schreiben?

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
{
     pulic:
          MyClass(int par);
          int Method1(int par);
          int Method2(int par1, double par2);
     private:
          ............
};

würde das ungefähr folgenden extra Code geben:

Code:
extern "C" declspec(dllexport) MyClass* createMyClass(int par)
{
     return new MyClass(par);
}

extern "C" declspec(dllexport) void destroyMyClass(MyClass* ref)
{
     delete ref;
}

extern "C" declspec(dllexport) int MyClass_Method1(MyClass* ref, int par)
{
     return ref->Method1(par);
}

extern "C" declspec(dllexport) int MyClass_Method2(MyClass* ref, int par1, double par2)
{
     return ref->Method2(par1, par2);
}

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.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2014, 15:36
Beitrag #5

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: C++ Dll in Labview einbinden
@ rolfk

Danke für die Antwort.
Ich habe noch eine Frage bezogen auf deinem Code, der mir leider nicht so ganz klar Blink

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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2014, 15:55
Beitrag #6

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: C++ Dll in Labview einbinden
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.

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2014, 16:38
Beitrag #7

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: C++ Dll in Labview einbinden
ich habe folgende versucht :


header File sieht so aus:
Code:
extern "C" __declspec(dllexport)double Addi(double a, double b);

        // Returns a - b
         extern "C" __declspec(dllexport)double Subtract(double a, double b);

        // Returns a * b
         extern "C" __declspec(dllexport)double Multiply(double a, double b);

        // Returns a / b
        // Throws const std::invalid_argument& if b is 0
         extern "C" __declspec(dllexport)double Divide(double a, double b);

C.File sieht so aus:
Code:
double Addi(double a, double b)
    {
        return a + b;
    }

    double Subtract(double a, double b)
    {
        return a - b;
    }

    double Multiply(double a, double b)
    {
        return a * b;
    }

    double Divide(double a, double b)
    {
        if (b == 0)
        {
            throw invalid_argument("b cannot be zero!");
        }

        return a / b;
    }

Daraus DLL erstellt und in Labview importiert.
Es funktioniert einwandfrei 2hands

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
{
public:
    MyClass(int par);
    int Methode1(int par);
    int Methode2(int par1,double par2);
    ~MyClass(void);
};


Das Cpp File sieht so aus:

Code:
#include "StdAfx.h"
#include "MyClass.h"

MyClass::MyClass(int par)
{
    // ??

}

MyClass::~MyClass(void)
{
    //??
}

extern "C" __declspec(dllexport) MyClass* createMyClass(int par)
{
     return new MyClass(par);
}
extern "C" __declspec(dllexport) void destroyMyClass(MyClass* ref)
{
     delete ref;
}

extern "C" __declspec(dllexport) int MyClass_Methode1(MyClass* ref, int par)
{
     return ref->Methode1(par);
}

extern "C" __declspec(dllexport) int MyClass_Methode2(MyClass* ref, int par1, double par2)
{
     return ref->Methode2(par1, par2);
}
Bahn
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2014, 19:39
Beitrag #8

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: C++ Dll in Labview einbinden
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.03.2014, 20:01
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: C++ Dll in Labview einbinden
Offtopic2
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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.03.2014, 07:26
Beitrag #10

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: C++ Dll in Labview einbinden
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


Angehängte Datei(en)
13.0 .vi  create base.vi (Größe: 8,52 KB / Downloads: 361)

13.0 .vi  destroy base.vi (Größe: 6,38 KB / Downloads: 259)

13.0 .vi  get x.vi (Größe: 6,97 KB / Downloads: 284)

13.0 .vi  set x.vi (Größe: 6,77 KB / Downloads: 272)

13.0 .ctl  base.ctl (Größe: 4,29 KB / Downloads: 299)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  LabView DLL in C# einbinden beginner85 2 8.595 27.04.2012 19:48
Letzter Beitrag: rolfk
  C-dll einbinden: LabVIEW hängt eug 16 20.470 27.12.2010 02:34
Letzter Beitrag: eug
  c# DLL in LabVIEW einbinden TSC 3 13.143 07.10.2008 08:13
Letzter Beitrag: TSC
  Visual Basic DLL in LabVIEW einbinden jacket12 2 9.728 10.06.2008 09:54
Letzter Beitrag: jacket12
  DLL in LabVIEW einbinden verflixxt 15 40.774 21.02.2008 21:11
Letzter Beitrag: IchSelbst
  Unrar.dll in LabVIEW einbinden xtro 1 5.070 13.02.2008 09:34
Letzter Beitrag: rolfk

Gehe zu: