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

本文关键字:dll C++ 字符串 包含 扩展 ASCII 字符 | 更新日期: 2023-09-27 18:30:58

我有一个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^"。字符串的其余部分很好。我已经尝试了编码类型,但似乎仍然遇到问题。

谢谢阿南德

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

你试过吗:

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

请注意,如果方法的名称相同,则不需要入口点。