Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ShortString C# Äquivalent (https://www.delphipraxis.net/122162-delphi-shortstring-c-aequivalent.html)

ebber 10. Okt 2008 13:41


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

Dax 10. Okt 2008 14:02

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.

ebber 10. Okt 2008 14:33

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.

Apollonius 10. Okt 2008 14:39

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).

mkinzler 10. Okt 2008 14:40

Re: Delphi ShortString C# Äquivalent
 
Ein c-String ist eine Zeiger auf eine 0-terminierte Zeichenkette. Aber warum kein c# nativer Stringtyp?

ebber 10. Okt 2008 14:43

Re: Delphi ShortString C# Äquivalent
 
Was ist ein c# nativer Stringtyp?

Dax 10. Okt 2008 15:07

Re: Delphi ShortString C# Äquivalent
 
Der C#-native Stringtyp ist... anders: http://www.codeproject.com/KB/dotnet/strings.aspx. Die Struktur in Delphi nachzubauen und zu benutzen konnte aber nur mit Casts und Unsafe Code funktionieren, weil der Marshaller solche Bitbashs zu Recht nicht mag.

http://blog.rednael.com/2008/08/29/M...DLLsInNET.aspx

ebber 10. Okt 2008 19:04

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.

Dax 10. Okt 2008 19:22

Re: Delphi ShortString C# Äquivalent
 
Delphi-Quellcode:
function DeinDLLCode: PChar;
begin
  result := '42';
end;
Code:
[DllImport("Deine.dll", CharSet = CharSet.Ansi)]
static extern string DeinDLLCode();
Das ist die simple Variante, aber nicht schön - lieber anders:
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:
[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();
}
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 ;)

ebber 11. Okt 2008 18:28

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 01:16 Uhr.
Seite 1 von 2  1 2      

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