![]() |
AW: String/Char-Pointer aus C# DLL korrekt auslesen
Primär lag es an dem "out" im Funktionsaufruf.
Ich war mir vorher sicher, dass ich nur Daten aus der Funktion bekomme, wenn das "out" vor der jeweiligen Variablen steht. Bei der stückweisen Anpassung des Programms kamen dann noch kleinere Fehler hinzu, wie bspw. ein falsche Dimensionierung der ansistring-Variablen (muss ja mind. Länge+1 sein wg. #0). Die 2. Funktion musste auch umgestellt werden, ansonsten wurde die Variable aus der 1. Funktion nicht gefunden (dadurch war dann fehler>0). Ich hatte lange an der Konvertierung ansistring/ansichar mit pchar, pwidechar, pansichar "rumgedoktert", da zwischen den Funktionen immer fehler=0 war und somit alles richtig übergeben wurde, aber eben nicht zuverlässig. Vielen Dank nochmal, so fängt das Jahr gut an!!!! |
AW: String/Char-Pointer aus C# DLL korrekt auslesen
OUT/VAR bedeutet, daß die "Variable" geändert werden kann, da eine Referenz auf den Speicher der Variable übergeben wird.
Das wird hier aber nur benötigt, wenn die Funktion den Speicher resserviert und dann den neuen Pointer zurückgeben muß. Hier wird aber nur ein "unveränderlicher" Zeiger übergeben und nur der Inhalt der aufgezeigten Speichers verändert. (Leider) kann man bei Pointern nicht angeben, ob der Inhalt des Speichers verändert wird (der Inhalt des referenzierten Speichers kann gelesen oder überschrieben werden), da IN/OUT/VAR/CONST nur eine Beziehung zur Variable selber haben. Der "Wert" der Variable, also die Adresse des Speichers, wird ja nicht verändert. Wenn man es genau nimmt, dann könnte eine
Delphi-Quellcode:
dennoch den Inhalt des strings verändern. (auch wenn standardmäßig die Compilermagic und die Prüfungen des Compilers versuchen das zu verhindern, was man aber böswillig umgehen könnte)
procedure IchBinBöse(const S: string);
|
AW: String/Char-Pointer aus C# DLL korrekt auslesen
Danke für deine Ausführungen himitsu. Das hilft mir auf jeden Fall weiter, da noch ein
paar weitere Routinen in der DLL enthalten sind, die ich auch brauche. Dann laufe ich nicht noch mal in dieselbe Falle:-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz