using System.Drawing;
using System.Runtime.InteropServices;

namespace VideoPlayLib.MadVR
{
    [ComImport, System.Security.SuppressUnmanagedCodeSecurity]
    [Guid("8FAB7F31-06EF-444C-A798-10314E185532")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IMadVRInfo
    {
        // The memory for strings and binary data is allocated by the callee
        // by using LocalAlloc. It is the caller's responsibility to release the
        // memory by calling LocalFree.
        // Field names and LPWSTR values should be read case insensitive.

        [PreserveSig]
        int GetBool([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out]out bool value);

        [PreserveSig]
        int GetInt([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out, MarshalAs(UnmanagedType.I4)]out int value);

        [PreserveSig]
        int GetSize([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out] out Size value);

        [PreserveSig]
        int GetRect([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out]out Rectangle value);

        [PreserveSig]
        int GetUlonglong([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out]out ulong value);

        [PreserveSig]
        int GetDouble([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out]out double value);

        [PreserveSig]
        int GetString([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out]out string value, out int chars);

        [PreserveSig]
        int GetBin([In, MarshalAs(UnmanagedType.LPStr)]string field, [Out]out byte[] value, [Out]out int size);
    }
}