我正在为管理 OCR 设备的 DLL 编写包装器。 DLL 有一个方法,其签名类似于以下内容:
unsigned long aMethod(char **firstParameter, char **secondParameter);
aMethod 返回指向所有参数的字符串指针。
我用 C#
写了这个签名...它几乎可以正常工作:
[DllImport(aDll.dll, CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Auto)]
static unsafe extern ulong aMethod(ref IntPtr firstParameter,
ref IntPtr secondParameter);
我是这样调用的:
aMethod(ref firstParameter, ref secondParameter);
与字符串相关的编码和解码如下:
Marshal.PtrToStringAnsi(firstParameter)
Marshal.PtrToStringAnsi(secondParameter)
显然,此编码是根据 DLL 的 API 约定选择的。
现在,编码过程有问题。假设设备有一个带有这个字符串“abcdefg”的输入。如果我使用来自纯 C++ 代码的 DLL,我会得到“abcdefg”作为输出。但是,如果我使用我编写的 C# 签名,字符串会丢失其第一个字符,看起来像“bcdefg”。
出了什么问题?如何修复 C# 方法?
最佳答案
尝试更改 CharSet
到 CharSet = CharSet.Ansi
关于c# - 将标准 C++ 字符串编码为 C# 字符串时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7515798/