![]() |
Delphi ShortString C# Äquivalent
Hallo,
die Frage ist wahrscheinlich schnell beantwortet, aber ich konnte die Lösung dennoch nicht finden. Ich habe eine Delphi Dll mit einer Funktion die einen Shortstring als result hat. Jetzt brauche ich das Äquivalent in C#, damit ich die Dll in meinem C# Programm verwenden kann. MfG |
Re: Delphi ShortString C# Äquivalent
Gibt's nicht. Das passendste wäre noch byte[]... Am besten benutzt du einen C-String als Resulttyp, das .NET nämlich mappen - aber Shortstrings als solche sind der Runtime unbekannt.
|
Re: Delphi ShortString C# Äquivalent
:(
Was genau meinst du mit C-String? Oder wenn es keinen ShortString gibt, gibt es was Vergleichbares? String ist ja nicht so toll in Delphi. Also mein String hat höchstens 20 Zeichen. |
Re: Delphi ShortString C# Äquivalent
Lass dir einen PChar und dessen Länge als Parameter geben. Wenn dein Ausgabestring nicht länger als diese Maximallänge ist, schreibst du ihn in den PChar, ansonsten gibst du einen Fehlercode zurück. In C# wird der PChar zum StringBuilder (glaube ich zumindest).
|
Re: Delphi ShortString C# Äquivalent
Ein c-String ist eine Zeiger auf eine 0-terminierte Zeichenkette. Aber warum kein c# nativer Stringtyp?
|
Re: Delphi ShortString C# Äquivalent
Was ist ein c# nativer Stringtyp?
|
Re: Delphi ShortString C# Äquivalent
Der C#-native Stringtyp ist... anders:
![]() ![]() |
Re: Delphi ShortString C# Äquivalent
Also wenn er das zu Recht nicht mag dann würde ich nochmal auf den PChar zurück kommen. Obwohl Pointer bei C# nicht wirklich was verloren haben?
Aber hat jemand etwas Code dazu. Ich habe mich mal umgeschaut auch mit dem StringBuilder, aber ich bin zu keinem Ergebnis gekommen. |
Re: Delphi ShortString C# Äquivalent
Delphi-Quellcode:
function DeinDLLCode: PChar;
begin result := '42'; end;
Code:
Das ist die simple Variante, aber nicht schön - lieber anders:
[DllImport("Deine.dll", CharSet = CharSet.Ansi)]
static extern string DeinDLLCode();
Delphi-Quellcode:
function DeinDLLCode(str: PChar): Integer;
begin if assigned(str) then begin // str auf '42' setzen, wie ging das? result := 0; end else result := 3; // '42'#0 end; end;
Code:
Da fehlen natürlich noch alle Fehlerauffangmechanismen, und für Richtigkeit garantieren kann ich auch nicht (so oft hantiere ich nicht mit P/Invokes), aber das Prinzip müsste rübergekommen sein ;)
[DllImport("Deine.dll", EntryPoint = "DeinDLLCode", CharSet = CharSet.Ansi)]
static extern int DeinDLLCodeInternal([Out] StringBuilder str); static string DeinDLLCode() { int len = DeinDLLCodeInternal(null); StringBuilder str = new StringBuilder(len); DeinDLLCodeInternal(str); return str.ToString(); } |
Re: Delphi ShortString C# Äquivalent
Ich habe mal schnell die unschöne Variante probiert, die funktioniert. Wenn ich Zeit habe werde ich wahrscheinlich auch die andere noch mal probieren.
Danke MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 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