
with Ada.Unchecked_Conversion;
with Interfaces.C;  use Interfaces.C;
pragma Warnings(Off);
with System.Win32;
pragma Warnings(On);

with GNATCOM.Types;  use GNATCOM.Types;
with GNATCOM.GUID;
with GWindows.Types; use GWindows.Types;
with GNATOCX_Site;   use GNATOCX_Site;
with GNATOCX;        use GNATOCX;

package OleIdl is

   type IDropTarget;

   type Pointer_To_IDropTarget is access all IDropTarget;

   type POINTL is
      record
         x : Interfaces.C.long;
         y : Interfaces.C.long;
      end record;
   pragma Convention (C_PASS_BY_COPY, POINTL);


   IID_IDropTarget : aliased GNATCOM.Types.GUID :=
     GNATCOM.GUID.To_GUID ("{00000122-0000-0000-C000-000000000046}");

   type af_IDropTarget_QueryInterface is access
     function (This   : access IDropTarget;
	       riid   : Pointer_To_GUID;
	       ppvObj : Pointer_To_Pointer_To_Void
	      ) return HRESULT;
   pragma Convention (StdCall, af_IDropTarget_QueryInterface);

   type af_IDropTarget_AddRef is access
     function (This : access IDropTarget)
	       return unsigned_long;
   pragma Convention (StdCall, af_IDropTarget_AddRef);

   type af_IDropTarget_Release is access
     function (This : access IDropTarget)
	       return unsigned_long;
   pragma Convention (StdCall, af_IDropTarget_Release);

   type af_IDropTarget_DragEnter is access
     function (This            : access IDropTarget;
	       pDataObj        : access IDataObject;
	       grfKeyState     : DWORD;
	       pt              : POINTL;
	       pdwEffect       : access DWORD
	      ) return HRESULT;
   pragma Convention (StdCall, af_IDropTarget_DragEnter);

   type af_IDropTarget_DragOver is access
     function (This            : access IDropTarget;
	       grfKeyState     : DWORD;
	       pt              : POINTL;
	       pdwEffect       : access DWORD
	      ) return HRESULT;
   pragma Convention (StdCall, af_IDropTarget_DragOver);

   type af_IDropTarget_DragLeave is access
     function (This            : access IDropTarget
	      ) return HRESULT;
   pragma Convention (StdCall, af_IDropTarget_DragLeave);

   type af_IDropTarget_Drop is access
     function (This            : access IDropTarget;
	       pDataObj        : access IDataObject;
	       grfKeyState     : DWORD;
	       pt              : POINTL;
	       pdwEffect       : access DWORD
	      ) return HRESULT;
   pragma Convention (StdCall, af_IDropTarget_Drop);

   type IDropTargetVtbl;
   type Pointer_To_IDropTargetVtbl is access all IDropTargetVtbl;

   type IDropTarget is
      record
	 Vtbl : Pointer_To_IDropTargetVtbl;
      end record;
   pragma Convention (C_Pass_By_Copy, IDropTarget);

   type IDropTargetVtbl is
      record
	 QueryInterface         : af_IDropTarget_QueryInterface;
	 AddRef                 : af_IDropTarget_AddRef;
	 Release                : af_IDropTarget_Release;
	 DragEnter              : af_IDropTarget_DragEnter;
	 DragOver               : af_IDropTarget_DragOver;
	 DragLeave              : af_IDropTarget_DragLeave;
	 Drop                   : af_IDropTarget_Drop;
      end record;
   pragma Convention (C_Pass_By_Copy, IDropTargetVtbl);

end OleIdl;
