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!

30.01.2014, 16:35
Beitrag #21

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Ich kenne LabVIEW erst seit ein paar Monaten (das kommt jetzt nicht überraschend) und möchte DLL-Dateien gernen einbinden können. Mit dieser DLL will ichs lernen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2014, 19:25 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2014 19:41 von rolfk.)
Beitrag #22

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 16:14 )Klausenwirt schrieb:  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.

Wenn es mit dieser Konfiguration Fehler gibt dann ist eine Überprüfung der DLL selber sicher angesagt. Da wird irgendwas in der DLL gemacht was nicht kosher ist. Also alle Arrayindexierungen, Datentypen usw in der DLL selber überprüfen. Aber wahrscheinlich ist es viel schneller um die ganze CRC Berechnung gleich mal in LabVIEW zu implementieren, so wie schon von Jens vorgeschlagen. C(++) Programmierung ist nicht einfach, erfordert sehr genaues Arbeiten und viel Mühe um überhaupt die Basisstruktur betreffend Speicherverwaltung und korrekte Handhabung einzuhalten und bietetet ungezählte Möglichkeiten um den Speicher zu zerschiessen. Die meisten dieser Problem hast Du in LabVIEW gar nicht und kannst Dich deswegen auf das Wesentliche konzentrieren.
(30.01.2014 16:35 )Klausenwirt schrieb:  Ich kenne LabVIEW erst seit ein paar Monaten (das kommt jetzt nicht überraschend) und möchte DLL-Dateien gernen einbinden können. Mit dieser DLL will ichs lernen.

Dann tue das mit einer DLL die bewiesenermassen fehlerfrei ist. Ansonsten vertust Du Deine Zeit mit dem Debuggen der Call Library Node Konfiguration, derweil das Problem im C Code in der DLL ist!

Noch ein anderer Gedanke: Macht die DLL irgendwas mit dem CommandString? Denn ansonsten macht es überhaupt keinen Sinn um für einen Eingabestring auch noch einen extra Parameter mitzugeben der die Länge dieses Strings mitteilt. Den der C String wird ja durch ein NULL Byte abgeschlossen so dass eine vernünftig porgrammierte Funktion das daran schon erkennen kann. Oder hat der Programmierer eigentlich gedacht dass dieser Parameter ein Bytearray sein sollte, also gar kein String und deshalb nicht mal ein NULL Byte Terminator nötig wäre. Den char* kann in C entweder ein Singlebyte String sein, ein Bytearray, oder ein einzelner Character oder Byte das als Referenz genommen wird. C ist in dieser Hinsicht extrem doppelsinnig und das ist auch eines der Probleme der C Syntax. Sie ist in den meisten Fällen nicht genügend um eine eindeutige Bestimming der Bedeutung von Parametern zu machen. Da braucht man sehr oft extra Informationen, teils implizit aus Namenskonventionen (was aber auch schwer in die Hosen gehen kann) und weiterer Dokumentation in Form einer API Beschreibung oder zumindest Beispielcode.

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
31.01.2014, 14:40
Beitrag #23

Klausenwirt Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Jan 2014

2013
2013
DE



RE: String an DLL übergeben
Die Funktion, die in der DLL vorhanden ist, wird schon seit Jahren verwendet. Bisher war sie aber nicht als DLL vorhanden, sondern wurde im Code einfach eingefügt. Die DLL wurde nur für das LabVIEW-Programm erstellt.

In einer For-Schleife wird jedes einzelne Zeichen des CommandStrings mit logischen Operatoren bearbeitet und bitweise verschoben. Die Länge des CommandStrings ist gleich der Anzahl der Schleifendurchläufe. In der Funktion ist durchaus ein String vorgesehen.

So in etwa, der String taucht sonst nirgends in der Funktion auf:

for(; ui16_Länge; --ui16_Länge)
{
zwischenvariable = (short int) (*CommandString ^ ui16_CRC16)

//es folgt weitere Logik, in der aber nur mit der Zwischenvariablen gerechnet wird

CommandString++;
}
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: