Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   vom Zeiger zum String (https://www.delphipraxis.net/206096-vom-zeiger-zum-string.html)

Ydobon 18. Nov 2020 22:38

vom Zeiger zum String
 
Hallo!

Zunächst, von C# habe ich absolut keine Ahnung. Also entschuldigt bitte, wen ich Mist schreibe.
Ich habe den Wrapper einer C/C++ DLL für C#. Die DLL kennt nur ASCII-Strings. Beides nicht von mir und ich habe somit keinen Einfluss darauf. Für die Übergabe von Strings wird
Delphi-Quellcode:
var str = "Stringeling";
fixed (byte* byteChars = Encoding.ASCII.GetBytes(str))
verwendet. Zumindest die Richtung ist klar und funktioniert. Wenn ich aber aus der DLL Strings als Rückgabe erhalten möchte, muss ich den entsprechenden Speicherplatz reservieren (50 Leerzeichen sind irgendwie uncool) aber vor allem aus dem byte* irgendwie den String herausholen. In Delphi würde ich wohl einfach die Bytes durchlaufen, bis ich auf #0 treffe. Bei C# finde ich aber keine Möglichkeit und byte* ist auch nicht der ideale Begriff für Suchmaschinen.
Mit einem selbst geschriebenen Header benutze ich die Funktionen schon länger in Delphi-Programmen, Zeiger auf AnsiString, PAnsiChar und und und. Alles möglich. Nur das merkwürdige C# macht da mit.

Ich hoffe, jemand hat mehr Ahnung als ich und kann mir helfen.

Ydobon 18. Nov 2020 22:48

AW: vom Zeiger zum String
 
Kann man den Beitrag nicht mehr löschen?

Wie üblich, wenn man jemanden fragt, dann findet man sofort die Lösung. Diese Casts in C und Co.
Delphi-Quellcode:
Marshal.PtrToStringAnsi((IntPtr)byteChars);
Fehlt noch die Speicherreservierung.

himitsu 18. Nov 2020 23:18

AW: vom Zeiger zum String
 
Zitat:

löschen
Nein?

Stell dir mal vor jeder löscht alles wieder, dann hätte jemand Probleme, wenn er ein gleiches/ähnliches Problem hat und die Suchfunktion nie etwas findet.

Ydobon 19. Nov 2020 00:08

AW: vom Zeiger zum String
 
Normalerweise ja, aber die Frage war keine 10 Minuten Online. Sie dürfte wenn überhaupt kaum von jemand gelesen worden sein. Und hätte mir eine Blamage erspart.

Das mit der Reservierung hat sich auch geklärt, einfach ein Byte Array anlegen.

Andreas13 19. Nov 2020 12:08

AW: vom Zeiger zum String
 
Man kann aus Fehlern, dem Weg & den Überlegungen zur richtigen Lösung oft mehr lernen, als wenn man’s gleich richtig machen würde. Auch schon deswegen ist Deine "zu schnelle" Anfrage für viele Leser wertvoll!
Gruß, Andreas

generic 19. Nov 2020 13:22

AW: vom Zeiger zum String
 
Wenn du keine Lust auf die Funktionsdekleration und Datentypendefinitionen hast:

Schreib in das C# Programm ein COM-Server rein.
Auch die Schnittstelle wird in C# gemacht.

Dann kannst alles via TLB in Delphi importieren.

Damit du den COM-Server nicht Registrieren musst, kannst du noch eine Side-by-Side Konfiguration machen.

So nutze ich das seit vielen Jahren und macht keinen Ärger.

Ydobon 19. Nov 2020 20:25

AW: vom Zeiger zum String
 
Es sind Scripts für Unity (genauso neu für mich). Und da hat es schon ausreichend Spaß gebracht, Datenbankzugriff und diese Uralt-DLL (erste Version Anfang der 1990er) rein zu bringen. Etwas zur persönlichen Weiterentwicklung. Delphi spielt überhaupt keine Rolle.

@Andreas13: Wenn ich schließlich die Lösung so schnell gefunden habe, naja 2 Tage und halt die 10 Minuten, wird es anderen sicher nicht mehr viel bringen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.

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