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!

16.09.2015, 10:50 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2015 11:11 von rolfk.)
Beitrag #15

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Labview Import / DLL debuggen
(04.09.2015 17:10 )galilio schrieb:  Hallo Rolf,

Zurück zum meinen ersten Beitrag im bezug auf das Dummy Projekt "http://www.labviewforum.de/Thread-Labview-Import-DLL-debuggen".

Wenn ich dieses Dummy Projekt in Labview importiere dann funktioniert.
Bei diesem Import stört mich dieses Funktion:
Code:
DLLIMPORT Wrapper createWrapper(double a, double b)
{
Wrapper wrapper = {static_cast<void*>(new MyClass(a,b)) };
return wrapper;
}
Wie soll ich die Rückgabe dieses Funktion auf Labview Seite initialisieren?
Was ist mit der anderen Funktinoen:
Code:
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);
}

Wrapper ist ein C++ Objekt. Als solches ist es für Standard C ein Datenpointer.
Wenn Du dies in LabVIEW jeweils als pointersized Integer konfigurierst sollte es funktionieren. Das hindert einen LabVIEW Programmierer aber nicht mit diesem Integer irgendwelche Kapriolen zu machen wie etwa irgendeinen Wert hinzuzuaddieren oder etwas anderes sinnloses. Dann zeigt der Pointer aber nicht mehr auf das Objekt und beim nächsten Aufruf einer DLL Funktion mit diesem modifizierten "Pointer" krachts gewaltig.

Also pointersized Integer in der Call Library Configuration ist die Lösung aber als VI Library für den Konsum von Durchsnchitt LabVIEW Benützern ist das unzureichend.

Der ganze Klimbim mit static_cast<> erscheint mir übrigens sinnlos. Da kannst Du auch gleich das eigentlich C Objekt als Pointer verwenden statt da ein sinnloses Wrapperobjekt dazwischen zu schalten.

Ein Wrapperobjekt würde nur Sinn machen wenn Du da auch wirklich Wrapperfunktionen definierst etwa um zwischen LabVIEW Datentypen nach C++ und zurück zu konvertieren aber das kannst Du auch in den extern C Wrapperfunktionen direkt machen, die Du ja für den LabVIEW Aufruf erstellen solltest.

Warum nicht einfach etwas in dieser Art??

Code:
extern "C" MyClass* __declspec(dllexport) createMyClass(double a, double b)
{
      return new MyClass(a,b);
}

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


Nachrichten in diesem Thema
Labview Import - galilio - 22.08.2014, 22:31
RE: Labview Import - galilio - 24.08.2014, 08:09
RE: Labview Import - jg - 24.08.2014, 08:43
RE: Labview Import - galilio - 24.08.2014, 10:09
RE: Labview Import / DLL debuggen - rolfk - 16.09.2015 10:50

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

Gehe zu: