Labview Fehlermeldung beim Importieren von DLL

Gast #3772821
Hallo alle zusammen,

ich habe folgende Problem:

Ich habe einen CWrapper geschrieben.
Ursprüngliche Code war C++ (VS2008) --> in eine CCode gewrappert.

Als ich mit dem C_DLL_Wrapper fertig war, wollte ich die 
Ergebnis(DLL+dazu gehörige Header File) mit Labview importieren.

Ich bekomme leider folgende Fehlermeldung:"Diese Anwendung konnte nicht 
gestartet werden, da die Side-by-Side-Konfiguration ungültig ist"

Da ich in Labview gan am Anfang bin, weiss ich nicht woran es liegen 
kann.


Diese Fehlermeldung bekomme ich bei alle Funktionen.


hat jemenden eine Idee woran es liegen kann ?


Danke in Voraus
Persönliche Seite
Die DLL ist wohl keine C- bzw. C++-DLL, sondern eine .Net-DLL, die Du 
mit "C++/CLI" bzw. "Managed C++" geschrieben hast. Dazu jedenfalls passt 
die Fehlermeldung.

Überprüfe also die Projekteinstellungen; ärgerlicherweise ist der mit 
Visual C++ gelieferte Compiler auch ein .Net-Compiler und 
ärgerlicherweise nennt MS ihre .Net-Variante irreführenderweise "C++", 
so daß man da durchaus drauf reinfallen kann.
Persönliche Seite
Markus schrieb:
> Was ist der Unterschied "Calling Convention" zwischen stdcall(WINAPI)
> und C

Das beschreibt, wer den Stack aufräumt, der Aufrufer (Caller) oder der 
Aufgerufene (Callee).

C-Konvention (auch als "cdecl" bezeichnet) besagt, daß der Aufrufer den 
Stack aufräumt, womit auch Funktionsaufrufe mit variabler 
Argumentenliste möglich sind.
Das ist in C- und C++-Programmen der Standard.


In stdcall-Konvention (auch als "Pascal"-Aufrufkonvention bezeichnet) 
räumt der Aufgerufene den Stack auf.
Das ist der Standard für den Aufruf von Win32-API-Funktionen.

Siehe auch
http://msdn.microsoft.com/de-de/library/zkwh89ks.aspx
und
http://msdn.microsoft.com/de-de/library/zxk0tw93.aspx
Gast
hallo alle zusammen,



ich habe folgende versucht:

Mit Hilfe dieses link "http://labviewwiki.org/DLL/shared_library";, einen 
DLL von C++ zu erstellen und dann dieses DLL in Labview zu importieren.

Die normale Klasse "Header File"
1
#ifndef _BASE_CLASS_H_
2
#define _BASE_CLASS_H_
3

4
class base
5
{
6
   public:
7
      base(double x_in);
8
      virtual ~base(void);
9
      void set_x(double x_in);
10
      void get_x(double* x_out);
11
      void sqr_x(void);
12

13
   private:
14
      double x;
15
};
Cpp File:
1
#include "base_class.h"
2
#include <windows.h>
3

4
base::base(double x_in)
5
   {
6
      x = x_in;
7
   }
8

9
base::~base ()
10
   {
11
      /* clean up */
12
   }
13

14
void base::set_x(double x_in)
15
   {
16
      x = x_in;
17
   }
18

19
void base::get_x(double* x_out)
20
   {
21
      *x_out = x;
22
   }
23

24
void base::sqr_x(void)
25
   {
26
      x*=x;
27
   }

c_DLL_Wrapper Header File:
1
#ifndef _C_DLL_WRAPPER_H_
2
#define _C_DLL_WRAPPER_H_
3

4
/* building a DLL */
5
#define DLLIMPORT __declspec (dllexport)
6

7
#ifdef __cplusplus
8
   extern "C" { /* using a C++ compiler */
9
#endif
10

11
   typedef struct base base; /* make the class opaque to the wrapper */
12

13
   DLLIMPORT base* create_base(double x_in);
14
   DLLIMPORT void set_x(base* LV_ref, double x_in);
15
   DLLIMPORT void get_x(base* LV_ref, double* x_out);
16
   DLLIMPORT void destroy_base(base* LV_ref);
17
   DLLIMPORT void sqr_x(base* LV_ref);
18

19
#ifdef __cplusplus
20
   }
21
#endif
22

23

24
#endif /* _C_DLL_WRAPPER_H_ */
25

26

27
#endif /* _BASE_CLASS_H_ */

CPP File der C_DLL_Wrapper
1
#include "c_dll_wrapper.h"
2
#include "base_class.h"
3
#include <windows.h>
4

5
   DLLIMPORT base* create_base(double x_in)
6
   {
7
      return new base(x_in);
8
   }
9

10
   DLLIMPORT void set_x(base* LV_ref, double x_in)
11
   {
12
      LV_ref->set_x(x_in);
13
   }
14

15
   DLLIMPORT void get_x(base* LV_ref, double* x_out)
16
   {
17
      LV_ref->get_x(x_out);
18
   }
19

20
   DLLIMPORT void destroy_base(base* LV_ref)
21
   {
22
      delete LV_ref;
23
   }
24

25
   DLLIMPORT void sqr_x(base* LV_ref)
26
   {
27
      LV_ref->sqr_x();
28
   }

Das DLL konnte es erstellt werden.
Nur beim Importieren von der DLL File in Labview bekomme ich folgende 
Fehlermeldung(seh bitte Anhang).


Das Importieren an sich ist kein Problem und ich konnte auch alle 
Methode exportieren.Problem tritt bei Ausführung eine der Funktion.
Angehängte Dateien:
Gast
Hallo,


wenn ich ich meine Rückdaten Type zu double ändere dann bekomme ich auch 
das gleiche Fehler wie es oben steht.

Was für Problem hatte er mit dem Cluster LV_ref out .

Ich verstehe das nicht wie ich das aufheben soll?
Was mache ich denn falsch?

gibt jemenden, der mit DLL import sich auskennt?
Gast
/Meckermodus an

Labview meckert über das Frontpannel, du zeigst das Blockdiagramm 
merkste wat?
Labview sagt dir das nicht alle Terminals vom DLL Import angeschlossen 
sind ändere das
Du versuchst verzweifelt den Zeiger auf deine Klasse in Labview zu 
verarbeiten, wieso? Labview kann damit nichts anfangen! Kapsel den 
Zeiger in deiner DLL!
Du gibst einen Zeiger zurück ohne überprüft zu haben ob der gültig ist.
Du verschweigst uns mit welcher Version von Labview und mit welcher 
IDE/Compiler du deine DLL erzeugst.
Du nennst deinen Define DLLIMPORT es ist aber ein DLLEXPORT, es ist 
keine Schande richtige Bezeichnungen zu wählen.

/Meckermodus aus

Fange doch mal klein an, baue eine einfache DLL die nur eine Funktion 
exportiert, so zum Beispiel:

header
__declspec (dllexport) int dll_func(int para_hin, int* para_rueck);
cpp
__declspec (dllexport) int dll_func(int para_hin, int* para_rueck)
   {
      *para_rueck = para_hin+1;
  return 0;
   }
In Labview benötigst du hierfür nur signed 16 bit Datentypen.
Wenn das funktioniert geht es weiter.

Wichtig ist auch wie du das DLLImport VI konfiguriert hast. Mache einen 
Screenshot davon, das hilft bei der Fehlersuche.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.