我有一个C#应用程序通过C DLL与USB外设通信。
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 :(得分: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);
}
请注意,如果方法名称相同,则无需使用EntryPoint。