Пример #1
0
        public void UpdateSocialUserGroup(XboxSocialUserGroup socialGroup, IList <string> users)
        {
            if (socialGroup == null)
            {
                throw new ArgumentNullException("socialGroup");
            }
            if (users == null)
            {
                throw new ArgumentNullException("users");
            }

            // Allocates memory for parameters
            IntPtr cUserIds = MarshalingHelpers.StringListToHGlobalUtf8StringArray(users);

            // Allocates memory for returned objects
            IntPtr cErrMessage;

            // Invokes the c method
            XSAPI_RESULT errCode = SocialManagerUpdateSocialUserGroup(socialGroup.GetPtr(), cUserIds, (uint)users.Count, out cErrMessage);

            MarshalingHelpers.FreeHGlobalUtf8StringArray(cUserIds, users.Count);
            if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK)
            {
                throw new XboxException(errCode, cErrMessage);
            }

            // Does local work
            socialGroup.Refresh();
        }
Пример #2
0
        public void UpdateSocialUserGroup(XboxSocialUserGroup socialGroup, IList <string> users)
        {
            if (socialGroup == null)
            {
                throw new ArgumentNullException("socialGroup");
            }
            if (users == null)
            {
                throw new ArgumentNullException("users");
            }

            // Allocates memory for parameters
            List <IntPtr> userIdPtrs = new List <IntPtr>();

            for (int i = 0; i < users.Count; i++)
            {
                IntPtr cXuid = Marshal.StringToHGlobalUni(users[i]);
                userIdPtrs.Add(cXuid);
            }
            IntPtr cUserIds = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>() * users.Count);

            Marshal.Copy(userIdPtrs.ToArray(), 0, cUserIds, users.Count);

            // Allocates memory for returned objects
            IntPtr cErrMessage = Marshal.AllocHGlobal(Marshal.SizeOf <IntPtr>());

            // Invokes the c method
            XSAPI_RESULT errCode = SocialManagerUpdateSocialUserGroup(socialGroup.GetPtr(), cUserIds, (uint)users.Count, cErrMessage);

            // Handles error
            string errMessage = Marshal.PtrToStringUni(Marshal.ReadIntPtr(cErrMessage));

            Marshal.FreeHGlobal(cErrMessage);

            if (errCode != XSAPI_RESULT.XSAPI_RESULT_OK)
            {
                // todo do something
            }

            // Cleans up parameters
            foreach (IntPtr ptr in userIdPtrs)
            {
                Marshal.FreeHGlobal(ptr);
            }
            Marshal.FreeHGlobal(cUserIds);

            // Does local work
            socialGroup.Refresh();
        }