Übergabe von StringBuilder an die DLL-Funktion, wobei der Zeichenzeiger erwartet wird
Ich versuche mit einer in Delphi erstellten DLL-Bibliothek zu interagieren. In C ++ habe ich diesen Aufruf perfekt gemacht:
for(int y = 1; y <= 12; y++)
{
char * chanName = (char *) malloc(21);
memset(chanName,0,21);
channelName(y,20,chanName);
...
}
WoherchannelName
ist Typ definiert alstypedef int (CALLBACK* ChannelName)(int,int,char*);
Jetzt versuche ich, dasselbe in C # zu tun. Ich habe das gesucht und gefundenStringBuilder
wird häufig als Zeichenzeiger für DLL-Funktionen verwendet. So habe ich meine Funktion deklariert:
[DllImport("myDLL.dll")]
public static extern int ChannelName(int x, int y, StringBuilder z);
Und so versuche ich es zu nennen:
for (int x = 0; x < 12; x++)
{
StringBuilder b = new StringBuilder(100);
DLLInterface.ChannelName(x+1, b.Length, b);
Console.WriteLine(b.ToString());
}
Dies bringt die Konsole nur zum Ausdrucken, zum Beispiel:
☺ §
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
☺ î☺8f9
Ich erinnere mich an ein ähnliches Problem in C ++, weshalb ichmemset
die Erinnerung, die ichmalloc
Ich habe versucht, ein Äquivalent in C # zu finden, aber vielleicht liegt es an derStringBuilder
stattdessen? Für den Fall, dass meine Frage nicht sehr klar ist, möchte ich nur eine Zeichenfolge an meine Funktion übergeben, diese füllen und dann ausdrucken können. Strings sind in C # unveränderlich und es gibt keine guten Zeigeroptionen, weshalb ich es versucheStringBuilder
.