public XofFileEnumObject CreateEnumObject(byte[] bytes)
        {
            if (bytes == null)
            {
                throw new ArgumentNullException(nameof(bytes));
            }

            if (bytes.Length == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(bytes));
            }

            XofFileLoadMemory memory = new XofFileLoadMemory
            {
                Memory = Marshal.UnsafeAddrOfPinnedArrayElement(bytes, 0),
                Size   = new IntPtr(bytes.Length)
            };

            GCHandle memoryHandle = GCHandle.Alloc(memory, GCHandleType.Pinned);

            try
            {
                IXofFileEnumObject enumObject = _file.CreateEnumObject(memoryHandle.AddrOfPinnedObject(), XofFileLoadOptions.FromMemory);
                return(new XofFileEnumObject(enumObject));
            }
            finally
            {
                memoryHandle.Free();
            }
        }
        public XofFileEnumObject CreateEnumObject(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException(nameof(path));
            }

            IntPtr pathPtr = Marshal.StringToHGlobalUni(path);

            try
            {
                IXofFileEnumObject enumObject = _file.CreateEnumObject(pathPtr, XofFileLoadOptions.FromWFile);
                return(new XofFileEnumObject(enumObject));
            }
            finally
            {
                Marshal.FreeHGlobal(pathPtr);
            }
        }
 internal XofFileEnumObject(IXofFileEnumObject enumObject)
 {
     _enumObject = enumObject;
 }