Ich habe einen Wrapper um eine nicht verwaltete Methode:C# Garbage Daten in String aus nicht verwalteten Methode
[DllImport(DLL_LOCATION, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern Boolean voGetFirmwareVersion(StringBuilder s, ref uint d);
Dies funktioniert gut, der String mit chinesischen Schriftzeichen gefüllt wird. Fortuantely weiß ich, was der Text sollte lauten:
"Kamera 0057; FPGA 0009"
Was ich erhalte ist:
慃 敭 慲 〠 㔰 㬷 䘠 䝐 ⁁〰 㤰 猀 "" 0 珉 譞 珉 쬂 "" 造 琞 \ u085cʩ "
Ich habe versucht, das CharSet auf alle Kombinationen in meinem DLLImport-Flag zu ändern und habe versucht, die zurückgegebenen Zeichenfolgen ohne Erfolg zu ändern. Hilf mir Internet Land!
EDIT: Die DLL, die ich anrufe, gehört zu einem Gerät, das ich gerade programmiere. Alle anderen Funktionen funktionieren, aber die oben erwähnte gibt mir nur chinesische Zeichen.
Erneut bearbeiten: Unten ist der Code ich die Methode Signatur verwende oben zu nennen:
private string getFirmware()
{
uint r = 31;
StringBuilder sb = new StringBuilder(31);
bool result = voGetFirmwareVersion(sb, ref r);
if(!result)
{
MessageBox.Show("Error Getting Firmware");
}
return sb.ToString();
}
Welche DLL versuchen Sie anzurufen? –
Frage bearbeitet mit der DLL-Informationen –
Bitte geben Sie eine [mcve] –