private MLResult InternalGetScreensInfo(out List <MLScreensScreenInfo> info)
        {
            info = new List <MLScreensScreenInfo>();
            _screenInfoList.Initialize();
            MLResult.Code resultCode = MLScreensNativeBindings.MLScreensGetScreenInfoListEx(ref _screenInfoList);
            var           result     = MLResult.Create(resultCode);

            if (!result.IsOk)
            {
                return(result);
            }

            long screensArrayAddress = _screenInfoList.Entries.ToInt64();

            for (var i = 0; i < _screenInfoList.Count; ++i)
            {
                long entryAddress = screensArrayAddress +
                                    i * Marshal.SizeOf(typeof(MLScreensNativeBindings.MLScreensScreenInfoExNative));
                var entryPtr    = new IntPtr(entryAddress);
                var entryNative = (MLScreensNativeBindings.MLScreensScreenInfoExNative)Marshal.PtrToStructure(entryPtr,
                                                                                                              typeof(MLScreensNativeBindings.MLScreensScreenInfoExNative));
                MLScreensScreenInfo entry = entryNative.Data;
                info.Add(entry);
            }
            resultCode = MLScreensNativeBindings.MLScreensReleaseScreenInfoListEx(ref _screenInfoList);
            result     = MLResult.Create(resultCode);
            return(result);
        }