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 

String an DLL übergeben



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!

27.01.2014, 17:59
Beitrag #11

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: String an DLL übergeben
(27.01.2014 09:04 )Klausenwirt schrieb:  Die DLL wurde in C++ geschrieben. Welche Parameter muss ich dann ändern?

Das hängt ganz davon ab wie die Funktion definiert wurde im C++ Code. Ist es eine globale Funktion oder eine Objektmethode?

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
29.01.2014, 08:27
Beitrag #12

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Die Funktion ist eine globale Funktion. Sie hat zwei numerische Eingangselemente und einen String (char *StringName). Der Ausgabewert ist numerisch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.01.2014, 17:06
Beitrag #13

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: String an DLL übergeben
(29.01.2014 08:27 )Klausenwirt schrieb:  Die Funktion ist eine globale Funktion. Sie hat zwei numerische Eingangselemente und einen String (char *StringName). Der Ausgabewert ist numerisch.

Tja, das ist natürlich sehr ungenau definiert. Ist der Prototyp jetzt

int fnCRDLL(int, int, char*);

So wie Du im ersten Post die Call Library Node konfiguriert hast sieht es mehr aus wie:

int fnCRDLL(int, char*, int);

aber wie Du die CLN genau konfiguriert hast entzieht sich meiner Kenntnis genauso, denn Du hast das VI ja nicht beigefügt.

Grundsätzlich gilt für CLN Fragen:

Attachement von sowohl dem VI mit der CLN als auch dem Headerfile mit der Funktionsdeklaration hat am meisten Chancen um soviel möglich Unklarheiten und Ungenauigkeiten zu vermeiden.

Alles andere ist ins Blaue schiessen und hoffen dass es plötzlich ganz magisch funktioniert, was aber noch lange nicht ein Beweis ist dass alles korrekt konfiguriert ist und Du nicht im Hintergrund doch noch irgendwie Speicher kaputtschiesst und damit LabVIEW und Deine Applikation hinterliistig sabotierst.

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
29.01.2014, 17:29
Beitrag #14

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Es ist int

int fnCRDLL(int, char *, int); (der Zeiger steht vor dem Namen des Strings, falls das wichtig ist)


Mit C++ hab ich selbst noch nicht programmiert. Die DLL-Datei hat ein Kollege erstellt.



13.0 .vi  CalcCrc.vi (Größe: 21,77 KB / Downloads: 232)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.01.2014, 21:19 (Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2014 21:21 von rolfk.)
Beitrag #15

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: String an DLL übergeben
(29.01.2014 17:29 )Klausenwirt schrieb:  Es ist int

int fnCRDLL(int, char *, int); (der Zeiger steht vor dem Namen des Strings, falls das wichtig ist)


Mit C++ hab ich selbst noch nicht programmiert. Die DLL-Datei hat ein Kollege erstellt.

Bitte "Save for Previous" machen und als 2012 oder früher abspeichern.

Sage Deinem Kollegen mal dass er den Funktionsprototypen so deklariert und die DLL nochmals kompiliert. Dann ist die C++ Namensdekoration zumindest mal weg.

extern "C" __cdecl int fnCRDLL(int start, char *cmd, int cmdLen);

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.01.2014, 08:31
Beitrag #16

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Hier die LV-Version 2010:


10.0 .vi  CalcCrc.vi (Größe: 17,32 KB / Downloads: 245)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2014, 08:45 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2014 08:46 von Y-P.)
Beitrag #17

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: String an DLL übergeben
Hallo Rolf,

wenn Du noch kein LabVIEW 2013 hast, dann bitte im Profil erwähnen (da steht "ALLE seit 6.0"). Dann kann man das VI gleich auf eine frühere Version zurückspeichern. Danke.

Gruß Markus

(29.01.2014 21:19 )rolfk schrieb:  Bitte "Save for Previous" machen und als 2012 oder früher abspeichern.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2014, 15:41 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2014 15:51 von rolfk.)
Beitrag #18

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: String an DLL übergeben
(30.01.2014 08:31 )Klausenwirt schrieb:  Hier die LV-Version 2010:

Also mal serious: int ist nicht short und deshalb auch nicht int16. int == int16 war mal zu Windows 3.1 Zeiten korrekt aber wir sind inzwischen doch beinahe 20 Jahre weiter und sogar in einem anderen Jahrtausend! Das effektiv verwendete Header File würde noch immer viele möglich Irtümer und Annahmen vermeiden.

Und was soll der ganze Klimbims mit new length minus old length? Man nehme x Characters (Bytes) füge noch mal x NULL Bytes an, um dann die LabVIEW CLN da noch einmal ein NULL Byte anfügen zu lassen (ja das macht die weil Du den Parameter als C String definiert hast) und teile der DLL dann mit dass doch nur x Bytes sind. Das ganze Arraygetue kann ganz einfach weg und Du kannst die Länge des ersten StringLength direkt an den dritten Parameter anschliessen.

Und jetzt kommt vielleicht der Clue: Handelt es sich hierbei eventuel um ein serialles Gerät? Könnte es sein dass die DLL oder das Gerät da ganz zufällig ein Carriage Return und/oder Linefeed am Ende erwartet? Den muss man schon explizit in LabVIEW an einen String anfügen, LabVIEW macht das nicht eigenmächtig und sehr zurecht.

Also was liefert Dir die Funktion denn bis jetzt?

Zudem die Deklaration der Funktion gemäss der Konfiguration in der CLN sollte wirklich sein:


extern "C" __cdecl unsigned short fnCRDLL(unsigned short start, char *cmd, unsigned short cmdLen);


(30.01.2014 08:45 )Y-P schrieb:  Hallo Rolf,

wenn Du noch kein LabVIEW 2013 hast, dann bitte im Profil erwähnen (da steht "ALLE seit 6.0"). Dann kann man das VI gleich auf eine frühere Version zurückspeichern. Danke.

Gruß Markus

(29.01.2014 21:19 )rolfk schrieb:  Bitte "Save for Previous" machen und als 2012 oder früher abspeichern.

2013 habe ich zwar, war aber noch kein zwingender Grund es zu installieren und dann warte ich immer bis SP1 rauskommt.

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.01.2014, 16:14
Beitrag #19

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Zu dem "Klimbis": Ich habe Beitrag #8 umgesetzt und der DLL nur die tatsächliche Länge mitgeteilt.

In diesem SubVi bin ich immer noch am PC, die Daten werden erst viel später an ein serielles Gerät übertragen. Es erwartet auch keinen Carriage Return und/oder Linefeed am Ende.

Die Funktion berechnet einen CRC-Wert des Eingangsstrings. Sie liefert mir auch das richtige Ergebnis, das habe ich schon überprüft. Es hat der Fall, dass bei längeren Tests LabVIEW abstürzt, wenn ich diese DLL verwende.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2014, 16:28
Beitrag #20

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: String an DLL übergeben
Offtopic2
Wieso die CRC-Berechnung nicht in LabVIEW umsetzen?

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


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL: String übergeben und wieder ausgeben..woran scheiterts? angori 1 6.953 06.10.2009 10:16
Letzter Beitrag: rolfk

Gehe zu: