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!

24.08.2011, 13:03
Beitrag #1

M@rRy Offline
LVF-Padawan
***


Beiträge: 273
Registriert seit: Aug 2011

7.1
2011
EN


Deutschland
String an DLL
Moinsen mal wieder,

wahrscheinlich is die Frage total easy, aber wie kann ich einen String von LV an eine DLL übergeben? Die DLL ist in C programmiert und das Problem ist das der string dort nicht richtig erkannt / ausgelesen werden kann.

Mein Code dazu schaut vereinfacht so aus (ohne Prototypen und co):

long berechne(char dllname[], long a, long b, long *erg)
{
if(strcmp(dllname, "mul") == 0)
*erg = a+b;
}

der Vergleich über strcmp scheint aber nicht zu funktionieren. Ich denke es könnte bald an den Unterschiedlichen auffassungen von LV und C was einen String angeht liegen, weiß aber keine Abhilfe.
Also, wer is klüger?

Gruß
Daniel

Nur wer neugierig ist, lernt ständig dazu.

Mythos:
Mit LabView lassen sich gut Programme leichter entwickeln

Realität:
Mit LabView lassen sich gut und schlechte Programme leichter enwickeln!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 06:25 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2011 07:08 von Jochen_BW.)
Beitrag #2

Jochen_BW Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Mar 2008

2010,2012
2008
EN

73760
Deutschland
RE: String an DLL
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


Angehängte Datei(en) Thumbnail(s)
   

Gibt es einen Unterschied zwischen Theorie und Praxis? Es gibt ihn. In der Tat. (Werner Mitsch)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 07:18
Beitrag #3

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
RE: String an DLL
Ich darf mal wieder meinen Lieblingspfad posten Big Grin
C:\Program Files\National Instruments\LabVIEW xx\examples\dll\data passing
Dort sind sowohl LabVIEW als auch C Quellcodes hinterlegt, wie man Daten an externen Code übergibt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.08.2011, 07:52
Beitrag #4

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
Das ist ja mal cool. Top2
Den kannte ich jetzt auch noch nicht. Blush

Gruß Markus

(25.08.2011 07:18 )abrissbirne schrieb:  Ich darf mal wieder meinen Lieblingspfad posten Big Grin
C:\Program Files\National Instruments\LabVIEW xx\examples\dll\data passing
Dort sind sowohl LabVIEW als auch C Quellcodes hinterlegt, wie man Daten an externen Code übergibt.

--------------------------------------------------------------------------
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
25.08.2011, 08:19
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
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
25.08.2011, 08:53 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2011 09:10 von M@rRy.)
Beitrag #6

M@rRy Offline
LVF-Padawan
***


Beiträge: 273
Registriert seit: Aug 2011

7.1
2011
EN


Deutschland
RE: String an DLL
Guten morgen,

also ich übergebe von LV her einen C String Pointer, deshalb hatte ich es auch so verstanden das ich da mit dem Datentypen kein Problem kriegen sollte, da hier ja die \0 bereits angehängt wird. Warum klappt dann mein strcmp() nicht? der Compiler gibt mir keinen Fehler, wenn ich eine zweite rechenanweisung dadrunter packe geht es bei dieser, aber die erste wird trotzdem übersprungen. Huh
Eine weitere Rechenanweisung = Selbe Code nur mit Vergleich auf add und einer anderem anderen "Rechenalgorithmus".
Edit: Es ist mir total rätselhaft warum, wieso und weshalb, ich hab am Programm nichts geändert und jetzt geht es ...

Danke nochmal an alle, hat sich damit - hoffentlich - erledigt.

Gruß
Daniel

Nur wer neugierig ist, lernt ständig dazu.

Mythos:
Mit LabView lassen sich gut Programme leichter entwickeln

Realität:
Mit LabView lassen sich gut und schlechte Programme leichter enwickeln!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: