P / Invoke,c#:unsigned char丢一个字节
发布时间:2020-12-15 06:28:17 所属栏目:百科 来源:网络整理
导读:我正在为软件SDK的dll文件工作,我正在尝试调用一个函数来获取有关该软件主机的信息. 在函数想要的结构体中有两个无符号字符变量(HostMachineAddress,HostProgramVersion),当我尝试从c#…调用它时,我似乎“松开”最后一个字节,如果我将下面的c#struct中的Size
我正在为软件SDK的dll文件工作,我正在尝试调用一个函数来获取有关该软件主机的信息.
在函数想要的结构体中有两个无符号字符变量(HostMachineAddress,HostProgramVersion),当我尝试从c#…调用它时,我似乎“松开”最后一个字节,如果我将下面的c#struct中的SizeConst更改为5我得到丢失的字节,但是它导致另一个变量丢失数据. 有人可以帮我找到办法解决这个问题吗?也试图使用一个类而不是struct导致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); 解决方法
你的C#结构的布局不同于C一(HostProgramVersion应该是最后).
也适用于ByValTStr的字符串编组使用[StructLayout(LayoutKind.Sequential,CharSet = CharSet.Ansi)]). 丢失最后一个字节的问题可能是编组器尝试将空值追加到字符串(如以空字符结尾的字符串).尝试使用sbyte [] ByValArray而不是字符串. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |