我有一个 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^”。字符串的其余部分很好。我尝试过编码类型,但似乎仍然有问题。
谢谢 阿南德
最佳答案
你试过吗:
[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。
关于c# - 如何将包含扩展 ascii 字符的字符串传递给非托管 C++ dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110190/