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 

Aufruf von DLL führt zu Absturz...



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!

11.05.2010, 08:15
Beitrag #1

tt-web Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 123
Registriert seit: Jul 2009

8.6
2008
de

64354
Deutschland
Aufruf von DLL führt zu Absturz...
Hallo,
ich habe in C++ eine DLL geschrieben. Jetzt tritt folgendes Problem auf: Wenn ich einen CLR-Knoten ins Diagramm einfüge und unter Einstellungen die DLL angebe, erhalte ich eine Auswahl der Exportierten Funktionen und kann mit der DLL arbeiten. Stelle ich dagegen den Pfad programmatisch zur Verfügung, kann ich die Funktionen nicht mehr auswählen und LabVIEW strürzt ab. Was könnte der Fehler sein?

Gruß Thomas
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.05.2010, 10:01 (Dieser Beitrag wurde zuletzt bearbeitet: 11.05.2010 10:02 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Aufruf von DLL führt zu Absturz...
Wenn Du den Pfad programmatisch angibst bekommt die Call Library Node diesen erst zur Laufzeit zu sehen. Sie kann zur Editierzeit also gar nicht wissen welche DLL Du laden möchtest und deshalb auch gar nicht in dieser noch unbekannten DLL schauen was für Funktionen verfügbar sind, um sie Dir in der Selection Box zur Auswahl anzubieten.

Warum es abstürzt? Hast Du denn einen Namen eingeführt? Die Selectionbox erlaubt das Auswählen aus einer Liste WENN die DLL zur Editierzeit bekannt ist, aber man kann da genau so gut einen Namen hineinschreiben (was bei programmatischem Libraryauswahl absolut unumgänglich ist).

Und natürlich muss die Funktion die da steht von der DLL auch exportiert werden (was aber einen Laufzeitfehler geben sollte wenn dem nicht so wäre) und die genannte Funktion in der von Dir angegebenen DLL muss natürlich auch ganz genau stimmen qua Parameter, Datentypen und Calling Convention. Last but not least kann das Problem in der Configuration und Deiner Implementation der Call Library Node liegen. Nicht alle Fehler in dieser Hinsicht brauchen immer gleich zu crashen, obwohl sie es beinahe immer früher oder später tun, aber dieses später kann durchaus auch Stunden nach der verhängnisvollen Tat sein.

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
11.05.2010, 10:12
Beitrag #3

tt-web Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 123
Registriert seit: Jul 2009

8.6
2008
de

64354
Deutschland
Aufruf von DLL führt zu Absturz...
Hallo,
also die Parameter stimmen eigentlich alle. Wie gesagt, das Programm stürzt nicht ab wenn ich die dll direkt eingebe. Wenn ich es über ein wire tue, dann stürzt es ab. Ich habe in das Feld mit den Funktionen die gewünschte Funktion direkt eingegeben und mehrfach auf Rechtschreibfehler überprüft. Etwas merkwürdig finde ich das schon.
Exportiert werden die Funktionen übrigens.

Also: Haken bei Specify path on diagram, per Hand in Function name "Versionsnummer" ohne die "" geschrieben. Thread auf Run in any thread gestellt und Calling convention auf "C" gesetzt. Im prototype steht jetzt: "CStr Versionsnummer(void);" Im Reiter Parameters den Return Parameter in Versionsnummer umbenannt, als Typ String angegeben und im Format C String Pointer ausgewählt.... ist das der Knackpunkt? Soweit ich weiß liefert die Funktion einen String, aber keinen Zeiger....

Die Funktion ist in der cpp Datei so angelegt:

Test_API string Versionsnummer(string)
{
version="1.00.00.00";
return(version);
}
wobei ich "#include <string> und namespace std benutze. In der Headerdatei steht dann

extern
Test_API void Versionsnummer(void);

Ich habe bestimmt eine Kleinigkeit übersehen, aber ich komme nicht drauf...

Gruß Thomas
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.05.2010, 11:34 (Dieser Beitrag wurde zuletzt bearbeitet: 11.05.2010 11:39 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Aufruf von DLL führt zu Absturz...
' schrieb:Die Funktion ist in der cpp Datei so angelegt:

Test_API string Versionsnummer(string)
{
version="1.00.00.00";
return(version);
}
wobei ich "#include <string> und namespace std benutze. In der Headerdatei steht dann

Also die Funktion nimmt einen string parameter und gibt einen string Parameter zurück!!! Warum konfigurierst Du denn die Funktion in der Call Library Node mit einer leeren (void) Parameterliste (CStr Versionsnummer(void))?

Zudem der C++ Datentyp "string" ist ein Objekt kein C string pointer. LabVIEW kann und wird niemals C++ Objekte in der Call Library Node unterstützen, da das Binaryinterface dazu compilerabhängig ist.

Du wirst schon explicit ein char* zurückgeben müssen aber meine praktischen C++ Kenntnisse hören hier schon auf. Eventuel ist es genug den Returnparameter der Funktion entsprechend zu deklarieren und macht Dein lieber C++ Compiler die Konversion vom string Objekt in den C string Pointer automatisch im return statement.

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 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Absturz durch unzulässige Pointer VS_03 3 10.274 28.10.2016 18:32
Letzter Beitrag: VS_03
  Absturz von Labview nach schliessen eines VIs sima 4 7.869 23.01.2012 17:07
Letzter Beitrag: sima
  Absturz und fehler bei aufrufen einer externen dll Georg26 3 6.483 18.07.2011 09:45
Letzter Beitrag: Georg26
  LabVIEW: Absturz nach externem Code-Aufruf abrissbirne 22 21.338 14.09.2007 07:18
Letzter Beitrag: rolfk

Gehe zu: