我正在为一个软件的SDK的dll文件工作,我试图调用一个函数来获取有关该软件的主机的信息。P/Invoke,C#:无符号字符丢失一个字节
有两个无符号的字符变量(HostMachineAddress,HostProgramVersion)在函数想要的结构中,它看起来像我“松”最后一个字节,当我尝试从c#调用它...如果我改变SizeConst下面的C#结构到5我得到丢失的字节,但它导致其他变量丢失数据。
有人能帮我找到一种方法来解决这个问题吗?还尝试使用,而不是结构的一类引起system.stackoverflow错误
C#结构
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct sHostInfo
{
public int bFoundHost;
public int LatestConfirmationTime;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szHostMachineName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string HostMachineAddress;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szHostProgramName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string HostProgramVersion;
}
C#
[DllImport("Cortex_SDK.dll")]
public static extern int GetHostInfo(out sHostInfo pHostInfo);
为什么HostProgramVersion和szHostProgramName在你的C#代码中交换? – Fox32 2011-03-07 15:47:59