(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.