AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi ShortString C# Äquivalent

Offene Frage von "ebber"
Ein Thema von ebber · begonnen am 10. Okt 2008 · letzter Beitrag vom 11. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#1

Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 14:41
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
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 15:02
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.
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#3

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 15:33


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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 15:39
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).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 15:40
Ein c-String ist eine Zeiger auf eine 0-terminierte Zeichenkette. Aber warum kein c# nativer Stringtyp?
Markus Kinzler
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#6

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 15:43
Was ist ein c# nativer Stringtyp?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 16:07
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
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#8

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 20:04
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.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Delphi ShortString C# Äquivalent

  Alt 10. Okt 2008, 20:22
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
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#10

Re: Delphi ShortString C# Äquivalent

  Alt 11. Okt 2008, 19:28
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:54 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