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

标签 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^”。字符串的其余部分很好。我尝试过编码类型,但似乎仍然有问题。

谢谢 阿南德

最佳答案

你试过吗:

[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/

相关文章:

c# - 如何取消带 sleep 的后台 worker ?

c# - JSON反序列化为json中缺少键的类[字符串可以是单个字符串或列表字符串]

c# - 调用 Task.WaitAll() 时如何设置任务的用户身份?

c# - Marshal.ThrowExceptionForHR 抛出 NotSupportedException

c++ - 如何指定 GetDelegateForFunctionPointer 的调用类型 System : Func?

c# - 确定 .NET 类型的序列化大小和非托管内存效率

c# - 事件处理程序不触发

java - JAXB:当返回类型是接口(interface)时,如何使用字段名称进行编码?

sql - .NET SqlConnection.Dispose() 可以抛出异常吗?

c# - 在 C# 中读取时,如何从 C++ 中删除字符串\0