struct GAMEINFO
{
DWORD _1[6]; //0x00
WORD _1a; //0x18
CHAR szGameName[0x18]; //0x1A
CHAR szGameServerIp[0x56]; //0x32
CHAR szAccountName[0x30]; //0x88
CHAR szCharName[0x18]; //0xB8
CHAR szRealmName[0x18]; //0xD0
BYTE _2[0x157]; //0xE8
CHAR szGamePassword[0x18]; //0x23F
};
This is what I have so far:
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]
public struct GameInfo
{
[FieldOffset(0x00)] [MarshalAs(UnmanagedType.ByValArray, SizeConst=6)] public uint[] _1;
[FieldOffset(0x18)] public UInt16 _1a;
[FieldOffset(0x1A)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=24)] public string szGameName;
[FieldOffset(0x32)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=86)] public string szGameServerIp;
[FieldOffset(0x88)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=48)] public string szAccountName;
[FieldOffset(0xB8)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=24)] public string szCharName;
[FieldOffset(0xD0)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=24)] public string szRealmName;
[FieldOffset(0xE8)] [MarshalAs(UnmanagedType.ByValArray, SizeConst=343)] public uint[] _2;
[FieldOffset(0x23F)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst=24)] public string szGamePassword;
}
EDIT:
Changing it to sequential did the trick.
Why are you using ByValTStr?
Should I not be?
It's working.