2012-04-11 4 views
3

Ich habe eine C# -Anwendung, die über eine C-DLL mit einem USB-Peripheriegerät spricht.Wie man eine Zeichenfolge mit erweiterten ASCII-Zeichen an eine nicht verwaltete C++ - DLL übergeben

Der C-DLL implementiert eine Funktion:

long WriteText(char* data, long length); 

Wenn dies von C/C++ Aufruf Ich kann es regelmäßig ASCII-Text, aber auch einige erweiterte Zeichen wie '£' (0x9C hex) senden.

Allerdings habe ich dies in einer C# -Klasse eingewickelt

[DllImport("c:\\USBPD.DLL", EntryPoint = "WriteText")] 
public static extern int WriteText(string data, int length); 

Allerdings, wenn ich es einen String mit einem „£“ Ich sende bekommen ein ‚u ^‘ in seinen Platz. Der Rest der Saite ist in Ordnung. Ich habe mit den Kodierungstypen herumgespielt, habe aber immer noch Probleme.

Thank Anand

+0

Welche codierende C-Funktion erwartet ihr 'char * data' Argument? –

+0

Ich bin mir ziemlich sicher, es ist ASCII - aber nicht die Quelle, wie die DLL als ein Binärtreiber vom Hardware-Provider verteilt wird. – Nigma

Antwort

4

Haben Sie versucht:

[DllImport("c:\\USBPD.DLL")] 
private static extern int WriteText([In] byte[] text, int length); 

public static int WriteText(string text) 
{ 
    Encoding enc = Encoding.GetEncoding(437); // 437 is the original IBM PC code page 
    byte[] bytes = enc.GetBytes(text); 
    return WriteText(bytes, bytes.Length); 
} 

Beachten Sie, dass Entrypoint nicht notwendig ist, wenn der Name der Methode ist die gleiche.

+0

Wunderbar! Das oben genannte hat super funktioniert. Ich änderte die Codierung in Unicode, die zu funktionieren schien. – Nigma

Verwandte Themen