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



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!

25.08.2011, 08:19
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.317
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: String an DLL
(25.08.2011 06:25 )Jochen_BW schrieb:  Hallo Daniel,

ohne es jetzt zu wissen, einfach mal eine Vermutung ins Blaue hinein. C keine keine Strings in dem Sinne sonderen nur Char Arrays. Versuch doch mal anstatt einem String ein Arry of U8 an die DLL zu übergeben. Gibt in der String Palette auch eine Funktion zum Umwandlen. Unter Umständen noch eine 0(Stringende) an das Array anhängen.

Gruß Jochen


Hab mir das eben noch mal angeschaut, als bei mir geht das auch wenn ich nen String übergebe Bahn
Lad doch einfach mal Dein VI hoch, dann kann man Dir wohl am besten helfen.

Gruß Jochen

Das ist leider ein wenig verkehrt. C kennt eben schon einen Unterschied zwischen einem String und einem Byte Array. Zwar nicht wie der Speicher selber angelegt ist aber alle C String Funktionen gehen davon aus dass ein String sauber mit einem NULL Character abgeschlossen ist. Ältere Funktionen gehen grundsätzlich nur davon aus, neuere Funktionen haben oft einen extra length Parameter um auf diese Art sogenannte Bufferoverrunfehler sicher vermeiden zu können.

Wenn Du in LabVIEW einen CLN Parameter als Byte Array Pointer konfigurierst, übergibt LabVIEW einfach den Pointer auf die Arraydaten und die Funktion hat besser eine Methode um zu wissen, wie lange das Array ist. LabVIEW macht weiter nichts mit dem Array und fügt auch garantiert keinen NULL Character an das Ende an. Die C Funktion dagegen kann den Längenparameter des LabVIEW Arrays nicht sehen und das heisst entweder dass sie ein Array bestimmter Länge erwartet, was natürlich vom Code im LabVIEW Diagramm auch garantiert werden muss, oder dass sie einen weiteren Funktionsparameter hat mit dem ihr die Arraylänge mitgeteilt wird.

Wenn man in LabVIEW einen CLN Parameter als String Pointer konfiguriert, dann macht LabVIEW einen extra Schritt: an das Ende des Strings, so wie LabVIEW ihn kennt, wird ein NULL Character angefügt und der Pointer auf diesen String wird and die Funktion übergeben. Wenn dieser CLN Parameter auch als String Ausgang benützt wird, dan scannt LabVIEW den Stringbuffer nach Rückkehr der Funktion nach einem NULL Character und passt die Länge des Strings in seiner Datenstruktur entsprechend an.

Was immer die C Funktion tut, man muss im Diagram garantieren dass der Buffer den man übergibt midestens so gross ist wie die Funktion es verlangt. Das gilt sowohl für Eingangsparameter (die von der C Funktion nur gelesen werden) aber noch viel mehr für Ausgangsparameter (in die die Funktion schreibt). Die Effekte bei Missachtung dieser Regel können varieren von scheinbar nichts (aber bei Ausgangsparametern wird immer irgendwie verkehrter Speicher überschrieben), über fehlerhafte Ausführung oder Rechenergebnisse, zu delayed crashes (Exception Dialog wenn LabVIEW später den korrumpierten Speicher für andere Operationen ansprechen will), sofortigen Exception Dialogen, oder gar Totalabschmieren auf der Stelle.

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
String an DLL - M@rRy - 24.08.2011, 13:03
RE: String an DLL - Jochen_BW - 25.08.2011, 06:25
RE: String an DLL - rolfk - 25.08.2011 08:19
RE: String an DLL - abrissbirne - 25.08.2011, 07:18
RE: String an DLL - Y-P - 25.08.2011, 07:52
RE: String an DLL - M@rRy - 25.08.2011, 08:53

Gehe zu: