我在c#中调用c dll函数,返回64位ASCII字符数组,因为c#使用UNICODE如何将ASCII字符数组转换为UNICODE字符串?
我之前通过在结构中包含字符串来完成此操作,因为该函数的结构作为其参数之一,如下所示:
public struct example
{
public uint ID;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)]
public string serialNumber;
}
这次我不能使用结构,因为这个新函数将serialNumber作为其参数之一。我已经将serialNumber声明为一个字符串,然后当调用导入的c函数程序崩溃时,我认为这个数据冲突的原因是什么?
很抱歉,如果这个问题有点令人困惑,我会尽力解释我的问题,任何帮助都将不胜感激。
答案 0 :(得分:0)
你需要像这样使用System.Runtime.InteropServices.CharSet.Ansi
:
[StructLayout( LayoutKind.Sequential, CharSet = CharSet.Ansi )]
public struct example
{
public uint ID;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)]
public string serialNumber;
}
您还可以将字符串声明为字节数组,稍后使用:
进行转换myString = System.Text.Encoding.ASCII.GetString( byteArray );