2016-04-21 7 views
-2

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();   
    } 
+0

Welche DLL versuchen Sie anzurufen? –

+0

Frage bearbeitet mit der DLL-Informationen –

+0

Bitte geben Sie eine [mcve] –

Antwort

0

aus Schaltet die Antwort die CharSet auf Keine eingestellt war. Da es dort nicht vorhanden ist, wird standardmäßig Unicode verwendet. Ich hatte angenommen, dass es keine gewesen wäre.

+1

Verwenden Sie nicht Auto. Verwenden Sie Ansi. Lesen Sie die Dokumentation. –

+0

Danke für den Kopf David, in früheren Posts wurde mir geraten, Ansi nicht zu benutzen. Das funktioniert aber total. –

Verwandte Themen