コード例 #1
0
        /// <summary>
        /// Parse PROP_VAL_UNION structure.
        /// </summary>
        /// <param name="ptr">A pointer points to the allocated memory.</param>
        /// <param name="proptype">Property Types.</param>
        /// <returns>Instance of PROP_VAL_UNION structure.</returns>
        public static PROP_VAL_UNION ParsePROP_VAL_UNION(IntPtr ptr, PropertyTypeValue proptype)
        {
            PROP_VAL_UNION pvu = new PROP_VAL_UNION();

            switch (proptype)
            {
                case PropertyTypeValue.PtypInteger16:
                    pvu.I = Marshal.ReadInt16(ptr);
                    break;

                case PropertyTypeValue.PtypInteger32:
                    pvu.L = Marshal.ReadInt32(ptr);
                    break;

                case PropertyTypeValue.PtypBoolean:
                    if (AdapterHelper.Transport.ToLower(System.Globalization.CultureInfo.CurrentCulture) != "mapi_http")
                    {
                        pvu.B = (ushort)Marshal.ReadInt16(ptr);
                    }
                    else
                    {
                        pvu.B = (byte)Marshal.ReadByte(ptr);
                    }

                    break;

                case PropertyTypeValue.PtypString8:
                    pvu.LpszA = ParseString_r(ptr);
                    break;

                case PropertyTypeValue.PtypBinary:
                    pvu.Bin = ParseBinary_r(ptr);
                    break;

                case PropertyTypeValue.PtypString:
                    pvu.LpszW = ParseWString_r(ptr);
                    break;

                case PropertyTypeValue.PtypGuid:
                    if (AdapterHelper.Transport.ToLower(System.Globalization.CultureInfo.CurrentCulture) != "mapi_http")
                    {
                        IntPtr uidaddr = new IntPtr(Marshal.ReadInt32(ptr));

                        if (uidaddr == IntPtr.Zero)
                        {
                            pvu.Lpguid = null;
                        }
                        else
                        {
                            pvu.Lpguid = new FlatUID_r[1];
                            pvu.Lpguid[0] = ParseFlatUID_r(uidaddr);
                        }
                    }
                    else
                    {
                        if (ptr == IntPtr.Zero)
                        {
                            pvu.Lpguid = null;
                        }
                        else
                        {
                            pvu.Lpguid = new FlatUID_r[1];
                            pvu.Lpguid[0] = ParseFlatUID_r(ptr);
                        }
                    }

                    break;

                case PropertyTypeValue.PtypTime:
                    pvu.Ft.LowDateTime = (uint)Marshal.ReadInt32(ptr);
                    pvu.Ft.HighDateTime = (uint)Marshal.ReadInt32(ptr, sizeof(uint));
                    break;

                case PropertyTypeValue.PtypErrorCode:
                    pvu.Err = Marshal.ReadInt32(ptr);
                    break;

                case PropertyTypeValue.PtypMultipleInteger16:
                    pvu.MVi = ParseShortArray_r(ptr);
                    break;

                case PropertyTypeValue.PtypMultipleInteger32:
                    pvu.MVl = ParseLongArray_r(ptr);
                    break;

                case PropertyTypeValue.PtypMultipleString8:
                    uint isFound = (uint)Marshal.ReadInt32(ptr);

                    if (isFound == (uint)ErrorCodeValue.NotFound)
                    {
                        pvu.MVszA.CValues = 0;
                        pvu.MVszA.LppszA = null;
                    }
                    else
                    {
                        pvu.MVszA = ParseStringArray_r(ptr);
                    }

                    break;

                case PropertyTypeValue.PtypMultipleBinary:
                    pvu.MVbin = ParseBinaryArray_r(ptr);
                    break;

                case PropertyTypeValue.PtypMultipleString:
                    pvu.MVszW = ParseWStringArray_r(ptr);
                    break;

                case PropertyTypeValue.PtypMultipleGuid:
                    pvu.MVguid = ParseFlatUIDArray_r(ptr);
                    break;

                case PropertyTypeValue.PtypNull:
                case PropertyTypeValue.PtypEmbeddedTable:
                    pvu.Reserved = Marshal.ReadInt32(ptr);
                    break;

                default:
                    throw new ParseException("Parsing PROP_VAL_UNION failed!");
            }

            return pvu;
        }
コード例 #2
0
 /// <summary>
 /// Parse PROP_VAL_UNION structure.
 /// </summary>
 /// <param name="propertyValue">The property value used for parsing.</param>
 /// <param name="proptype">The Property Types used for parsing.</param>
 /// <returns>Instance of PROP_VAL_UNION structure.</returns>
 public static PROP_VAL_UNION ParsePROP_VAL_UNION(AddressBookPropertyValue propertyValue, PropertyTypeValue proptype)
 {
     PROP_VAL_UNION pvu = new PROP_VAL_UNION();
     IntPtr valuePtr = IntPtr.Zero;
     valuePtr = Marshal.AllocHGlobal(propertyValue.Value.Length);
     Marshal.Copy(propertyValue.Value, 0, valuePtr, propertyValue.Value.Length);
     pvu = AdapterHelper.ParsePROP_VAL_UNION(valuePtr, proptype);
     Marshal.FreeHGlobal(valuePtr);
     return pvu;
 }
コード例 #3
0
        /// <summary>
        /// Parse PROP_VAL_UNION structure.
        /// </summary>
        /// <param name="ptr">A pointer points to memory allocated.</param>
        /// <param name="proptype">Property Types.</param>
        /// <returns>Instance of PROP_VAL_UNION structure.</returns>
        public static PROP_VAL_UNION ParsePROP_VAL_UNION(IntPtr ptr, PropertyType proptype)
        {
            PROP_VAL_UNION pvu = new PROP_VAL_UNION();

            switch (proptype)
            {
            case PropertyType.PtypInteger16:
                pvu.I = Marshal.ReadInt16(ptr);
                break;

            case PropertyType.PtypInteger32:
                pvu.L = Marshal.ReadInt32(ptr);
                break;

            case PropertyType.PtypBoolean:
                pvu.B = (ushort)Marshal.ReadInt16(ptr);
                break;

            case PropertyType.PtypString8:
                pvu.LpszA = Marshal.PtrToStringAnsi(new IntPtr(Marshal.ReadInt32(ptr)));
                break;

            case PropertyType.PtypBinary:
                pvu.Bin = ParseBinary_r(ptr);
                break;

            case PropertyType.PtypString:
                pvu.LpszW = Marshal.PtrToStringUni(new IntPtr(Marshal.ReadInt32(ptr)));
                break;

            case PropertyType.PtypGuid:
                IntPtr uidaddr = new IntPtr(Marshal.ReadInt32(ptr));
                if (uidaddr == IntPtr.Zero)
                {
                    pvu.Guid = null;
                }
                else
                {
                    pvu.Guid    = new FlatUID_r[1];
                    pvu.Guid[0] = ParseFlatUID_r(uidaddr);
                }

                break;

            case PropertyType.PtypTime:
                pvu.FileTime.LowDateTime  = (uint)Marshal.ReadInt32(ptr);
                pvu.FileTime.HighDateTime = (uint)Marshal.ReadInt32(ptr, sizeof(uint));
                break;

            case PropertyType.PtypErrorCode:
                pvu.ErrorCode = Marshal.ReadInt32(ptr);
                break;

            case PropertyType.PtypMultipleInteger16:
                pvu.MVi = ParseShortArray_r(ptr);
                break;

            case PropertyType.PtypMultipleInteger32:
                pvu.MVl = ParseLongArray_r(ptr);
                break;

            case PropertyType.PtypMultipleString8:
                pvu.MVszA = ParseStringArray_r(ptr);
                break;

            case PropertyType.PtypMultipleBinary:
                pvu.MVbin = ParseBinaryArray_r(ptr);
                break;

            case PropertyType.PtypMultipleString:
                pvu.MVszW = ParseWStringArray_r(ptr);
                break;

            case PropertyType.PtypMultipleGuid:
                pvu.MVguid = ParseFlatUIDArray_r(ptr);
                break;

            case PropertyType.PtypNull:
            case PropertyType.PtypEmbeddedTable:
                pvu.Reserved = Marshal.ReadInt32(ptr);
                break;

            default:
                throw new ParseException("Parsing PROP_VAL_UNION failed!");
            }

            return(pvu);
        }