# String lesen aus S7 mit Accon AGLink in C# - geht, geht nicht?



## TomG (7 September 2021)

Hallo zusammen,

Für mein aktuelles Projekt lese ich erstmals einen String aus einem Datenbaustein aus - genauer gesagt natürlich ein Byte Array, das ich in einen String konvertiere. Dazu habe ich eine Testanwendung gemacht. Hat alles wunderbar geklappt. Den fertigen Code in eine DLL für meine Hauptanwendung kopiert - kommt kein String mehr daher...

Das Problem liegt bei diesem Aufruf:

int ret = AGL4.S7String2String(myByteArray, out aktPrgName, myByteArray.Length);

myByteArray enthält die folgenden Werte für den Teststring HALLO
71, 65, 76, 76, 79

Rufe ich es in meiner Testanwendung auf, ist ret = 0, was gut ist.
Führe ich es in meiner Hauptanwendung aus, ist ret = -1048557, was weniger gut ist.

Laut Error.txt bedeutet diese Fehlernummer folgendes:
0xFFF00013;Der Puffer ist nicht lang genug

Da ich aber genau den gleichen Aufruf in beiden Anwendungen mache, kann ich mit dieser Meldung nicht viel anfangen.
Hat jemand vielleicht eine Idee?

Vielen Dank vorab!


----------



## Oberchefe (7 September 2021)

Ich weiß nicht, was die Funktion mit Strings genau macht. Aber: der S7-String hat vor den eigentlichen Zeichen die beiden Bytes für maximale und aktuelle Länge. Auf einem PC ist ein String gewöhnlich null-terminiert, er benötigt folglich für "HALLO" 6 Bytes wovon das letzte den Wert "0" hat. Passt das hier zusammen?


----------



## Rainer Hönle (8 September 2021)

Stell doch einmal deine Codesequenz hier ein. WIe Oberchefe schon sagt, mußt du für die Stringkonvertierfunktion die beiden Bytes davor ebenfalls auslesen. Wie ist aktPrgName deklariert?


----------



## TomG (8 September 2021)

Problem gefunden... 50 cm vor dem Bildschirm 😓 

Hatte bei der Ausgabe in der Testanwendung zuerst immer 2 Sonderzeichen vorne dran. In der Annahme, dass das eben die genannten Längen Bytes sind, habe ich diese vor dem Aufruf weggefiltert. Das Wegfiltern hat aber nur den eigentlichen Fehler verschleiert, dass der Offset für den String um 2 Bytes zu niedrig war - daher die Sonderzeichen.
Hätte ich ein reines Copy&Paste durchgeführt, wären beide Fehler nur aufgetaucht, wenn ein String länger als die maximale Zeichenzahl - 2 gewesen wäre...

Jetzt funktioniert alles einwandfrei! 👍


----------

