Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   String/Char-Pointer aus C# DLL korrekt auslesen (https://www.delphipraxis.net/178329-string-char-pointer-aus-c-dll-korrekt-auslesen.html)

Testsieger 2. Jan 2014 13:04

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!!!!

himitsu 2. Jan 2014 13:41

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:
procedure IchBinBöse(const S: string);
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)

Testsieger 2. Jan 2014 14:30

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 05:54 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz