Folgen Sie diesem Tutorial here, aber kein Erfolg. Fehler bei der Speicheradresse zurückgeben.Array von String in C# zurückgeben und Delphi [Interop] erhalten
Ich versuche, dies zu mögen, nicht mir die Speicherfehler, sondern kehrt nulls
-Code Delphi:
interface
procedure getValores(samples: array of string); stdcall; external 'myDll.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
vet :array[0..400] of string;
begin
getValues(vet);
Layout('',vet);
end;
end.
Code of C#
[DllExport(CallingConvention = CallingConvention.Cdecl)]
public static void getValores(
[Out]
[MarshalAs(UnmanagedType.LPArray,
ArraySubType=UnmanagedType.LPWStr, SizeConst=400)]
String[] test
)
{
if (test == null)
{
MessageBox.Show("null");
return;
}
MessageBox.Show("Recive" + test.Length);
for(int i = 0; i < test.Length; i++)
test[i] = "test";
return;
}
jemand durchgegangen Problem?
Vielen Dank
Viele Möglichkeiten. Dieser Code kann nicht funktionieren. Arrays und Strings in Delphi sind nicht Interpol sicher. Ihr Code wird nicht einmal funktionieren, wenn es reines Delphi war, weil Sie das Array nach Wert übergeben. Sie könnten die Liste beispielsweise als JASON codieren. Oder Sie könnten jeweils einen String zurückgeben. –
Oder Sie könnten einfach tun, was die Antwort auf die Frage, die Sie verlinkt, empfiehlt. Warum hast du dem Rat nicht gefolgt und deinen eigenen Code erfunden? –
Eine Zeichenfolge auf einmal zurückgeben ist eine gute Idee. Ich werde morgen testen. Tks –