3

我有一个通过 C DLL 与 USB 外围设备通信的 C# 应用程序。

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^'。其余的字符串很好。我玩过编码类型,但似乎仍然有问题。

感谢 Anand

4

1 回答 1

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。

于 2012-04-11T17:25:01.823 回答