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!

24.01.2014, 08:46 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2014 08:47 von Klausenwirt.)
Beitrag #1

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



String an DLL übergeben
Hallo,

beim Aufruf der DLL kommt es immer wieder zu Abstürzen von LabVIEW, auch wenn ich gar nicht im Debug-Modus bin, sondern Linien im Diagramm ziehe. C++ fügt am Ende eines Strings 0x00 an, um das Ende auch anzukündigen. LabVIEW teilt Funktionen die Länge des Strings am Anfang mit. Da ein String ja ein Array aus charctern ist, dachte ich, so wie im Bild würds gehn. Aber es hilft nicht wirklich. Ich dachte, so kann ich den Array künstlich größer machen bzw. Felder im Array initialisieren, aber mit nichts füllen. Damit wäre dann der Array größer (nicht der String, die Leerzeichen haben die Länge 0) und es wäre genug Puffer für die DLL vorhanden.
Gibts da eine bessere Lösung?

Variablen in der DLL:
Startwert = unsigned short int (ist auch Ergebnis)
Command = char *
Länge = unsigned short int

Aufrufkonvention: C



   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2014, 09:03 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2014 09:10 von GerdW.)
Beitrag #2

GerdW Online
______________
LVF-Team

Beiträge: 17.466
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String an DLL übergeben
Hallo Wirt,

Zitat:Ich dachte, so kann ich den Array künstlich größer machen bzw. Felder im Array initialisieren, aber mit nichts füllen.
Hast du mal zu Testzwecken die Länge deines Strings vor und nach dem AppendString verglichen?
Was wird es wohl bringen, wenn ich an einen String x-mal einen leeren String anhänge? Hmm
Ich nehme einen String der Länge "n" und hänge x-mal einen String der Länge Null daran an. Was wird wohl bei dieser Rechnung "Länge = n + x*0" herauskommen ???

Manchmal soll ja Nachdenken nicht schaden. Und wenn man sich dann nicht sicher ist, sollten man einfache Tests, wie oben genannt, bemühen… Wink

Ich dachte, das Problem mit den Abstürzen wäre behoben? Und jetzt stürzt dir LabVIEW schon beim Editieren ab? Hmm

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2014, 09:32
Beitrag #3

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Die leeren Strings waren dazu da, um im Array neue Felder anzulegen, die aber leer sind. Damit wird Speicher belegt, der mit den Abschlusszeichen gefüllt werden kann, oder? Mein Problem (siehe vorheriger Thread) ist bei Langzeittests nicht behoben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2014, 09:36 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2014 09:38 von GerdW.)
Beitrag #4

GerdW Online
______________
LVF-Team

Beiträge: 17.466
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String an DLL übergeben
Hallo Wirt,

Zitat:Die leeren Strings waren dazu da, um im Array neue Felder anzulegen, die aber leer sind.
Welches Array? Siehst du da irgendein Array? Ich sehe nur Strings…
Wenn du Bytes an den String anhängen willst, dann solltest du nicht-leere Strings anhängen. Eine Stringkonstante wie diese hier
   
sollte dabei hilfreich sein…

Alternativ kannst du auch ein Array of U8 mit der gewünschten Länge initialisieren und als String umgewandelt an deinen String-Input anhängen!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2014, 10:37
Beitrag #5

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Ein String ist ja ein Array aus dem Basistyp Char, wenn man es genau nimmt.
Ich hänge jetzt 10 mal 0x04 an den String, also wird 10 mal das Ende des Telegramms übertragen. In der DLL findet eine CRC-Prüfung statt, mein Ergebnis wird dadurch falsch. Es ist schon richtig, dass ich als String-Format CStr ausgewählt hab?

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2014, 10:44
Beitrag #6

GerdW Online
______________
LVF-Team

Beiträge: 17.466
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String an DLL übergeben
Hallo Wirt,

Zitat:Ein String ist ja ein Array aus dem Basistyp Char, wenn man es genau nimmt.
Du kannst aber nicht einfach Regeln aus dem C-Bereich nach LabVIEW übertragen!
Ein String ist ein String und ein U8-Array ist ein U8-Array. Punkt.

Zitat:Ich hänge jetzt 10 mal 0x04 an den String, also wird 10 mal das Ende des Telegramms übertragen. In der DLL findet eine CRC-Prüfung statt, mein Ergebnis wird dadurch falsch.
Ja, das ist nun mal so, wenn man einen anderen String als gefordert überträgt. Warum hängst du auch 0x04 an statt 0x00? Du änderst sowohl den Stringinhalt als auch dessen Länge, indem du da Zeichen anhängst - und wunderst dich über das Ergebnis?

Zum CStr kann ich nichts sagen: Ich kenne deine DLL nicht. Frag doch mal RolfK…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.01.2014, 10:59
Beitrag #7

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Ich hab schon auch 0x00 versucht, aber das Ergebnis ist auch falsch.

Kann ich mit LabVIEW für die DLL mehr Speicher bereitstellen, wegen der Ankündigung des Stringendes?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2014, 11:17
Beitrag #8

GerdW Online
______________
LVF-Team

Beiträge: 17.466
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: String an DLL übergeben
Hallo Wirt,

erstens übernimmt LabVIEW die korrekte String-Terminierung selbst, wenn man den entsprechenden Übergabetyp einstellt (soweit ich weiß, habe mich damit noch nicht im Detail beschäftigen müssen).
Zweitens steht es dir frei, einen längeren String als gefordert bereitzustellen, der DLL aber nur die tatsächlich genutzte Länge mitzuteilen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.01.2014, 21:24
Beitrag #9

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
Wenn Du den Parameter in der Call Library Node als C String konfigurierest fügt LabVIEW automatisch ein Null Byte an das Ende des Strings. Aber der Funktionsname riecht sehr stark nach C++ Namensdekoration. Bist Du Dir sicher dass dies eine exportierte C Funktion ist und nicht nur eine Objektmethode. Im zweiten Fall will die Methode nähmlich auch noch einen impliziten Objektpointer als ersten Parameter, und das wïrst Du in LabVIEW mit den bewiesenermassen eingeschränkten C Kenntnissen die Du bis jetzt demonstriert hast garantiert nicht hinbringen.

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
27.01.2014, 09:04
Beitrag #10

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Die DLL wurde in C++ geschrieben. Welche Parameter muss ich dann ändern?
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: