Tis*_*tos 11 c# pinvoke marshalling unsigned-char
我正在努力为软件SDK的DLL文件,我试图调用一个函数来获取有关软件主机的信息.
在函数想要的结构中有两个unsigned char变量(HostMachineAddress,HostProgramVersion),当我尝试从c#调用它时,我似乎"松散"了最后一个字节...如果我将下面的c#struct中的SizeConst更改为5我确实得到了丢失的字节,但是它导致另一个变量丢失了数据.
有人可以帮我找到解决这个问题的方法吗?也尝试使用类而不是struct导致system.stackoverflow错误
C#Struct
[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;
}
Run Code Online (Sandbox Code Playgroud)
C#
[DllImport("Cortex_SDK.dll")]
public static extern int GetHostInfo(out sHostInfo pHostInfo);
Run Code Online (Sandbox Code Playgroud)
您的C#struct的布局与C++的布局不同(HostProgramVersion应该是最后一个).
也适用于作为ByValTStr使用编组的字符串[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)].
丢失的最后一个字节的问题可能是编组器尝试将null追加到您的字符串(如以空字符结尾的字符串).尝试使用sbyte[]+ ByValArray而不是字符串.
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |