【发布时间】:2023-03-03 04:53:22
【问题描述】:
我正在为软件的 SDK 制作一个 dll 文件,并且我正在尝试调用一个函数来获取有关软件主机的信息。
函数想要的结构中有两个无符号字符变量(HostMachineAddress,HostProgramVersion),当我尝试从 c# 调用它时,我似乎“松散”了最后一个字节......如果我在 c# 中更改 SizeConst struct 下面到 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# 代码中被交换了?
标签: c# pinvoke marshalling unsigned-char