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

时间:2012-04-11 16:36:53

标签: c# marshalling unmanaged

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

感谢 阿南德

1 个答案:

答案 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。