public ISteamMatchmakingPingResponse(ISteamMatchmakingPingResponse.ServerResponded onServerResponded, ISteamMatchmakingPingResponse.ServerFailedToRespond onServerFailedToRespond) { if (onServerResponded == null || onServerFailedToRespond == null) { throw new ArgumentNullException(); } this.m_ServerResponded = onServerResponded; this.m_ServerFailedToRespond = onServerFailedToRespond; this.m_VTable = new ISteamMatchmakingPingResponse.VTable { m_VTServerResponded = new ISteamMatchmakingPingResponse.InternalServerResponded(this.InternalOnServerResponded), m_VTServerFailedToRespond = new ISteamMatchmakingPingResponse.InternalServerFailedToRespond(this.InternalOnServerFailedToRespond) }; this.m_pVTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ISteamMatchmakingPingResponse.VTable))); Marshal.StructureToPtr(this.m_VTable, this.m_pVTable, false); this.m_pGCHandle = GCHandle.Alloc(this.m_pVTable, GCHandleType.Pinned); }