本来有点懒,不过还是记一下。
使用HPSocket项目碰到C#调用结果不符合预期,也提了这个问题。
最终发现是c++中的bool类型为1 byte,而c#中采用4 bytes导致,需要在DllImport时,使用
[DllImport(HPSOCKET_DLL_PATH, CharSet = CharSet.Ansi, SetLastError = true)]
[return:MarshalAs(UnmanagedType.I1)]
public static extern bool HP_Server_HasStarted(IntPtr pServer);
额外处理返回值。