如何将包含扩展ascii字符的字符串传递给非托管C++ dll

问题描述:

我有一个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

你试过:

[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