![]() |
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:
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.
var str = "Stringeling";
fixed (byte* byteChars = Encoding.ASCII.GetBytes(str)) 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. |
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:
Fehlt noch die Speicherreservierung.
Marshal.PtrToStringAnsi((IntPtr)byteChars);
|
AW: vom Zeiger zum String
Zitat:
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. |
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. |
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 |
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. |
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 08:45 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