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 

Dieses Thema hat akzeptierte Lösungen:

Labview Import / DLL debuggen



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!

22.08.2014, 22:31
Beitrag #1

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
Labview Import
Hallo alle zusammen,


ich habe einen dummy c++ DLL projekt mit Visual studio erstellt um einfach einen Library Import in labview auszuprobieren.

das Erstellen von C++ DLL projekt lauft genau wie geschmiert. Daraus habe ich einen Wrapper geschrieben, die nicht anders macht als die dummy Klasse zu Wrappen:

Hier bei ist meine Versuch:
****das C++ Teil:

* header File:
class MyClass
{
public:
MyClass(double, double);
~MyClass();
double Add(double,double );
double Subst(double, double);
double Mult(double, double);
double Divid(double, double);
private:
double m_a, m_b;
};

*CppFile:


#include "stdafx.h"
#include "MyClass.h"


MyClass::MyClass(double a,double b)
{
this->m_a = a;
this->m_b = b;
}

MyClass::~MyClass(){ }

double MyClass::Add(double a, double b)
{
return (a + b);
}
double MyClass::Mult(double a, double b)
{
return (a * b);
}
double MyClass::Subst(double a, double b)
{
return (b - a);
}
double MyClass::Divid(double a, double b)
{
return (b / a);
}

**--> Das Wrapper sieht so aus
Header File:

#pragma once
#include "MyClass.h"
#define DLLIMPORT __declspec (dllexport)
#ifdef __cplusplus
extern "C" { /* using a C++ compiler */
#endif
typedef struct Wrapper
{
void *MYClass;
}Wrapper;

DLLIMPORT Wrapper createWrapper(double a, double b);
DLLIMPORT void destoryWrapper(Wrapper LV_ref);
DLLIMPORT double Add(Wrapper LV_ref, double a, double b);
DLLIMPORT double Subst(Wrapper LV_ref ,double a, double b);
DLLIMPORT double Mult(Wrapper LV_ref,double a, double b);
DLLIMPORT double Divid(Wrapper LV_ref, double a, double b);





#ifdef __cplusplus
}
#endif


*** Wrapper cpp File
#include "C_DllWrapper.h"


DLLIMPORT Wrapper createWrapper(double a, double b)
{
Wrapper wrapper = {static_cast<void*>(new MyClass(a,b)) };
return wrapper;
//new MyClass(a,b);
}

DLLIMPORT void destoryWrapper(Wrapper LV_ref)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
delete myClass;
}
DLLIMPORT double Add(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Add(a, b);
}

DLLIMPORT double Mult(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Mult(a, b);
}

DLLIMPORT double Subst(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Subst(a, b);
}

DLLIMPORT double Divid(Wrapper LV_ref, double a, double b)
{
MyClass *myClass = static_cast<MyClass*>(LV_ref.MYClass);
return myClass->Divid(a, b);
}

--> so weit so gut .

Ich kann daraus das DLL File erzeugen.
Ich habe dann mit Labview einen DLL Import durchgeführt.
Ich bekomme auch keinen Fehlermeldung.

--> hier ist das Problem:

bei einen einfache Test der funktionen bekomme ich einen komischen Ergebnisse:
wie z.B bei einen einfache Addition von zwei werte von type double
add(1,2) ich bekomme als Ergebnis 2,28614E-253
bei Multiplikation von 1*2 oder 2*3 oder ... = 0 (Ergebnis ist immer einen 0).

die lösung ist bestimmt einfach aber ich weiss es nicht was und wo ich in Labview was einstellen muss .



Für jeden Vorschlag danke ich euch in voraus.

besten Grüsse
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.08.2014, 08:09
Beitrag #2

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: Labview Import

Akzeptierte Lösung

Hallo alle zusammen,


es hat sich erledigt.
Es funktioniert es wieder alles genau wie es sein muss
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.08.2014, 08:43
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Labview Import
Hast du herausgefunden, was der Fehler war?

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
24.08.2014, 10:09
Beitrag #4

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: Labview Import
In der Header Wrapper "#include "MyClass.h" File
habe ich das include von MyClass auskommentiert.

Spiel es das eine Wirkung auf das DLL_Import in Labview ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2014, 08:38
Beitrag #5

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
wie kann ich duch die DLL Library Debuggen?
Hallo alle Zusammen,

ich habe es einen C_DLL_Wrapper geschrieben für einen C++ Anwenung.

Durch dieses C_DLL_Wrapper exportiere eine Paare Funktionenen in Labview.
Leider funktioniert das ganze nicht wie gerne hätte.Die Funktionen werde sauber exportiert ohne Fehlermeldung aber erste wenn ich eine Funktionen ausführe bekomme ich eine Fehlermeldung mit dem Nummer 1097 sonst gar keine andere Hinweise.

Dazu habe ich eine Frage: Soll ich auf irgendwas achten, wenn die Funktionen ( auf der C++ Seite) tief verschachtelt sind?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2014, 09:39 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2014 09:39 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Labview Import / DLL debuggen
Anniemacht_2
Beitrag hier angefügt, da es sich wohl immer noch um diese "tief verschachtelte Cpp-Lib" handelt…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2014, 12:19
Beitrag #7

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: Labview Import / DLL debuggen
Ich habe es einen dummy DLL Projekt erstellt wo ich ich mir zwei Zahlen addiere,multipliziere, vergleiche .... aber halt nur einen Klasse erstellt.
Dieses Beispiel sieht so aus :
--> Header File

myClass
{

};
--> CPP File der Klasse myClass: ...
dann meine C_Wrappper Header
und dann die Implemtiereung der C_Wrapper

Das DLL kann ich erstellen und ohne problem in Labview importieren.
Alle Funktionen kann ich die auch exportieren und testen .. alles funktioniert wie es sein muss

Wenn ich aber meine richtigen DLL_Projekt wo es viele Klassen gibt, importiere und testen möchte bekomme ich immer eine Fehlermeldung mit dem Nummer 1097.
Diese Fehlermeldung tritt bei jede Funktion, die ich in Labview ausführe sonst nichts

Ich bin in der Labview ganz neu und mache ich engentlich in dieses Projekt keine Labview Programmierung sondern einfach einen DLL Import mit der dazugehörige Header File

Danke in Voraus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2014, 17:45
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Labview Import / DLL debuggen
(25.08.2014 12:19 )galilio schrieb:  Ich habe es einen dummy DLL Projekt erstellt wo ich ich mir zwei Zahlen addiere,multipliziere, vergleiche .... aber halt nur einen Klasse erstellt.
Dieses Beispiel sieht so aus :
--> Header File

myClass
{

};
--> CPP File der Klasse myClass: ...
dann meine C_Wrappper Header
und dann die Implemtiereung der C_Wrapper

Das DLL kann ich erstellen und ohne problem in Labview importieren.
Alle Funktionen kann ich die auch exportieren und testen .. alles funktioniert wie es sein muss

Wenn ich aber meine richtigen DLL_Projekt wo es viele Klassen gibt, importiere und testen möchte bekomme ich immer eine Fehlermeldung mit dem Nummer 1097.
Diese Fehlermeldung tritt bei jede Funktion, die ich in Labview ausführe sonst nichts

Ich bin in der Labview ganz neu und mache ich engentlich in dieses Projekt keine Labview Programmierung sondern einfach einen DLL Import mit der dazugehörige Header File

Danke in Voraus

Fehler 1097 besagt grundsätzlich dass die DLL etwas tut was LabVIEW nicht gut findet. Das kann ein Bug sein in der DLL selber indem sie etwa Speicher anspricht den sie eben nicht sollte, aber meist hat es mit einer falschen Konfiguration Deiner Call Library Nodes zu tun. Die Datentypen UND auch ob diese By Reference oder By Val übergeben werden muss genau stimmen. Zudem musst Du bei Bufferen die durch die DLL gefüllt werden (Arrays und Strings) immer ganz strikt darauf achten dass diese im LabVIEW Diagram genügend gross prealloziert werden.

Es wäre sinnvoll wenn Du hier zumindest die Header Deiner DLLs als auch die C Sources inklusive Headers Deiner Wrapper DLL und natürlich auch die LabVIEW VIs als Anhang beifügen kannst. Dein ursprünglicher Post mit der Test DLL enthält bereits einige Unschönheiten aber ich gehe nicht im Post alles herauskopieren um es nochmals korrekt hier wieder einzufügen.

Ich hoffe Du hast zumindest einige C Kenntnisse, denn ohne LabVIEW UND C Kenntnisse bist Du eigentlich hier auf verlorenem Posten.

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
26.08.2014, 07:35
Beitrag #9

galilio Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 175
Registriert seit: Mar 2014

2015
2013
EN


Schweiz
RE: Labview Import / DLL debuggen
@rolfk

VIs kann ich hier nicht einfügen, da es von mehrere DLLs abhängig sind.
Dieses DLLs dateien sind über 19 MB gross.

Meine Vermutung (ist nur eine Vermutung) warum es nicht funktioniert, ist dieses Funktion :

const char *strFileSettings_p = "settings.ini"; // Kann es sein, dass es hier einen Problem ist !! (es handelt sich um eine Konfiguration Datei)
DLLIMPORT EFILibWrapper create_EFILib(bool boSimulate_p, const char *strFileSettings_p);

"settings.ini" ist eine Konfiguration Datei, muss ich die vielleicht in meinem Library configurieren?
Wenn ja, wie geht es das denn?


Danke in voraus


Angehängte Datei(en)
0.0 .txt  Neues Textdokument .txt (Größe: 4,06 KB / Downloads: 391)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.08.2014, 23:16 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2014 23:22 von rolfk.)
Beitrag #10

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Labview Import / DLL debuggen
(26.08.2014 07:35 )galilio schrieb:  @rolfk

VIs kann ich hier nicht einfügen, da es von mehrere DLLs abhängig sind.
Dieses DLLs dateien sind über 19 MB gross.

Meine Vermutung (ist nur eine Vermutung) warum es nicht funktioniert, ist dieses Funktion :

const char *strFileSettings_p = "settings.ini"; // Kann es sein, dass es hier einen Problem ist !! (es handelt sich um eine Konfiguration Datei)
DLLIMPORT EFILibWrapper create_EFILib(bool boSimulate_p, const char *strFileSettings_p);

"settings.ini" ist eine Konfiguration Datei, muss ich die vielleicht in meinem Library configurieren?
Wenn ja, wie geht es das denn?


Danke in voraus

Ich habe keine Ahnung was Du damit meinst. Zeig doch mal die VIs!!! Die DLLs brauche ich nicht aber Du kannst hier 100 Seiten Text schreiben was Du alles getan hast und wie und wo, und warum und noch kann ich nicht sehen was Du denn an der LabVIEW Seite wirklich getan hast.

Diese Zeile in Deinem Headerfile tut ABSOLUT nichts:

Code:
const char *strFileSettings_p = "settings.ini";

struct EFILibWrapper ist überflüssig, Du kannst auch genausogut direkt einen void *EFILib als Parameter verwenden und diesen in LabVIEW als Pointer sized integer konfigurieren.

CEFI_Out_Wrapper scheint nicht verwendet aber den solltest Du auch nicht als Funktionsparameter/Rückgabewert irgendwo verwenden. Das in LabVIEW zu interfacen ist ein Alptraum wenn Du nicht wirklich gute Low Level C Kenntnisse hast und ich habe keine Lust Dir das entsprechende VI zu schreiben.

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
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  USB Relay DLL import hansi9990 3 10.209 02.09.2019 09:15
Letzter Beitrag: hansi9990
  DLL Import externe Struktur in Header bekommen hansi9990 15 24.483 30.09.2016 17:20
Letzter Beitrag: hansi9990
  aus einem Library Import Installer machen galilio 5 13.051 04.04.2016 09:32
Letzter Beitrag: galilio
  DLL Import automatisieren CS 3 8.070 13.02.2015 10:53
Letzter Beitrag: CS
  Import Assistent findet Funktionen nicht TDO 1 5.636 11.12.2014 16:24
Letzter Beitrag: jg
  dll Import richtig verstanden? Gruenschnabel 6 8.324 19.09.2014 10:25
Letzter Beitrag: DATAAHEAD

Gehe zu: