我正在爲一個軟件的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