2012-04-11 43 views
3

我有一個C#應用程序通過C DLL與USB外設通信。如何將包含擴展ascii字符的字符串傳遞給非託管C++ dll

的C DLL實現了一個功能:

long WriteText(char* data, long length); 

如果從C/C調用此++我可以向它發送普通的ASCII文本但也有一些擴展字符,如 '£'(爲0x9c十六進制)。

不過,我有一個C#類

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

但是這個包裹起來,當我用它發送一個字符串「£」我得到它「U ^」的地方。其餘的字符串很好。我玩過編碼類型,但似乎仍然有問題。

感謝 阿南德

+0

C函數在其char * data參數中需要什麼編碼? – 2012-04-11 17:05:30

+0

我很確定它是ASCII - 但沒有源代碼,因爲dll是作爲硬件提供程序的二進制驅動程序分發的。 – Nigma 2012-04-11 17:30:05

回答

4

你試過:

[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); 
} 

注意,入口點是沒有必要的,如果方法的名稱是相同的。

+0

太棒了!以上工作很好。我將編碼更改爲似乎可行的Unicode。 – Nigma 2012-04-11 17:46:15

相關問題