AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

vom Zeiger zum String

Ein Thema von Ydobon · begonnen am 18. Nov 2020 · letzter Beitrag vom 19. Nov 2020
Antwort Antwort
Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#1

vom Zeiger zum String

  Alt 18. Nov 2020, 21:38
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.
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: vom Zeiger zum String

  Alt 18. Nov 2020, 21:48
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.
Marshal.PtrToStringAnsi((IntPtr)byteChars); Fehlt noch die Speicherreservierung.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#3

AW: vom Zeiger zum String

  Alt 18. Nov 2020, 22:18
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: vom Zeiger zum String

  Alt 18. Nov 2020, 23:08
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.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#5

AW: vom Zeiger zum String

  Alt 19. Nov 2020, 11:08
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#6

AW: vom Zeiger zum String

  Alt 19. Nov 2020, 12:22
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.
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
261 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: vom Zeiger zum String

  Alt 19. Nov 2020, 19:25
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 Uhr.
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