//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1998 - 1999
//
//  File:       direct.idl
//
//--------------------------------------------------------------------------

//  Direct.idl : IDL source for Direct.dll
// +++++++++++++++++++++++++++++++++++++
// This file will be processed by the MIDL tool to
// produce the type library (Direct.tlb) and marshalling code.
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

	

#define VB_ONLY 1


//
// from windef.h
#define	MAX_PATH	256

//
// from mmsystem.h 
//
#define MAXPNAMELEN 32					/* max product name length (including NULL) */
#define MAX_JOYSTICKOEMVXDNAME 260		/* max oem vxd name length (including NULL) */


//
//  Direct 3D Retain mode 
//

interface Direct3DRM2;
interface Direct3DRMArray;
interface Direct3DRMFrameArray;
interface Direct3DRMLightArray;
interface Direct3DRMPickArray;
interface Direct3DRMPick2Array;
interface Direct3DRMFaceArray;
interface Direct3DRMViewportArray;
interface Direct3DRMDeviceArray;
interface Direct3DRMVisualArray;		
interface Direct3DRMLight;
interface Direct3DRMVisual;
interface Direct3DRMViewport2;
interface Direct3DRMMeshBuilder2;
interface Direct3DRMFace;
interface Direct3DRMMaterial;
interface Direct3DRMMaterial2;
interface Direct3DRMMesh;	
interface Direct3DRMDevice2;	
interface Direct3DRMFrame2;	
interface Direct3DRMAnimationSet;
interface Direct3DRMWinDevice;
interface Direct3DRMAnimation;
interface Direct3DRMObject;
interface Direct3DRMWrap;
//interface Direct3DRMUserVisual;
interface Direct3DRMShadow;
interface Direct3DRMCallback;                  //reserved for DestroyObjectCallback
interface Direct3DRMDeviceUpdateCallback3;
//interface Direct3DRMUserVisualCallback;	
interface Direct3DRMLoadTextureCallback3;
interface Direct3DRMLoadCallback;	
interface Direct3DRMFrameMoveCallback2;
interface Direct3DRMEnumerateObjectsCallback;

//
//new RM interfaces	
//
interface Direct3DRMFrame3;
interface Direct3DRMMeshBuilder3;
interface Direct3DRMTexture3;
interface Direct3DRMDevice3;
interface Direct3DRMAnimationArray;
interface Direct3DRMAnimation2;
interface Direct3DRMProgressiveMesh;
interface Direct3DRMClippedVisual;
interface Direct3DRMObjectArray;
interface Direct3DRMInterpolator;
interface Direct3DRMMeshInterpolator;
interface Direct3DRMFrameInterpolator;
interface Direct3DRMMaterialInterpolator;
interface Direct3DRMTextureInterpolator;
interface Direct3DRMLightInterpolator;
interface Direct3DRMViewportInterpolator;

//
//  Direct Draw 
//
interface DirectDraw4;	
interface DirectDrawSurface4;
interface DirectDraw7;	
interface DirectDrawSurface7;
interface DirectDrawEnumSurfaces;
interface DirectDrawClipper;
interface DirectDrawPalette;			
interface DirectDrawColorControl;
interface DirectDrawGammaControl;
interface DirectDrawEnum;				
interface DirectDrawEnumModes;		
interface DirectDrawIdentifier;		
//interface DirectDrawEnumVideoPorts;
//interface DirectDrawVideoPort;
//interface DDVideoPortContainer;




//
//  Direct 3D Imediate mode 
//

//interface Direct3DViewport3;
//interface Direct3DMaterial3;
//interface Direct3DLight;	
//interface D3DValidateCallback;
interface Direct3D7;
interface Direct3DDevice7;
interface Direct3DVertexBuffer7;	
interface Direct3DEnumDevices;	
interface Direct3DEnumPixelFormats;

//
//  Direct Input
//
//	interface IdInputDevice;
interface DirectInput;
interface DirectInputDevice;
interface DirectInputDevice2;
interface DirectInputEffect;
interface DirectInputEnumEffects;
interface DirectInputEnumDevices;
interface DirectInputEnumDeviceObjects;
interface DIEnumCreatedEffectObjects;


//
// DirectSound
//

interface DirectSound;
interface DirectSoundBuffer;	
interface DirectSound3DBuffer;
interface DirectSound3DListener;
interface DirectSoundCapture;
interface DirectSoundCaptureBuffer;
interface DirectSoundNotify;
interface DirectSoundEnum;


//
// DirectPlay & DirectPlayLobby
//

interface DirectPlay4;
interface DirectPlayLobbyConnection;
interface DirectPlayAddress;	
interface DirectPlayLobby3;	
interface DirectPlayEnumConnections;
interface DirectPlayEnumPlayers2;	
interface DirectPlayEnumAddress;
interface DirectPlayEnumSessions2;
interface DirectPlayEnumAddressTypes;
interface DirectPlayEnumLocalApplications;
interface DirectPlayEnumServiceProviders;
interface DirectPlaySessionData;
		  
//
// Direct Music

interface DirectMusicLoader;
interface DirectMusicSegment;			  
interface DirectMusicPerformance;
interface DirectMusicComposer;
interface DirectMusicBand;
interface DirectMusicStyle;
interface DirectMusicChordMap;
interface DirectMusicSegmentState;
interface DirectMusicCollection;


#include "ocidl.idl"

//
// Base types 
//
import "wtypes.idl";	

[
	
	 uuid(E1211242-8E94-11d1-8808-00C04FC2C602),
	 version(1.0),
         helpstring("DirectX 7 for Visual Basic Type Library"),
 	 helpfile ("directx.chm")
]

library DxVBLib
{


#ifndef C_ONLY
    #define USERARG IDispatch	
	#define RMCLONEOBJECT Direct3DRMObject

    #include "directvbconst.idl"

	typedef long			Handle;
	typedef long			HWnd;
      typedef float           D3Dval;
	typedef long			D3Dcolor ;
	typedef long			D3DMaterialHandle;	
      typedef long            D3DMatrixHandle;
	typedef long			D3DTextureHandle; 
	typedef long			D3DRMGroupIndex;
	typedef long			Dpid;			
      typedef unsigned char   Byte;
	typedef long			HRSrc;	
	


	#define DirectPlayEnumPlayers2	DirectPlayEnumPlayers
	#define DirectPlayEnumSessions2	DirectPlayEnumSessions
	#define DirectDrawEnumModes2		DirectDrawEnumModes
	#define DirectDrawEnumSurfaces2	DirectDrawEnumSurfaces


#else

      #define USERARG IUnknown
	#define RMCLONEOBJECT IUnknown

	typedef unsigned char	Byte;
	typedef long			Handle;
	typedef long			HWnd;
	typedef float			D3Dvalue;
	typedef long			D3Dcolor ;
	typedef long			HRSrc;
	typedef long			Dpid;			

	typedef long			D3DMatrixHandle;
	typedef long			D3DTextureHandle;
	

	typedef long			D3DColorModel;	
	typedef long			D3DLightType;
	typedef long			D3DMaterialHandle;
   	typedef long            D3DRMSaveFlags; 
	typedef long			D3DPrimitiveType;
	typedef long			D3DFVFFlags;
	typedef long			D3DVertexType;
	typedef long			D3DLightStateType;
	typedef long			D3DRenderStateType;
	typedef long			D3DRenderStateSingle;
	typedef long			D3DTransformStateType;

	typedef long			D3DRMCombineType;
	typedef long			D3DRMColorModel;
	typedef long			D3DRMLightType;	
	typedef long			D3DRMFogMode;
	typedef long			D3DRMProjectionType;	
	typedef long			D3DRMGroupIndex;
   	typedef long            D3DRMMappingFlags;

	
	//ENUMERATORS
	typedef long			D3DRMRenderQuality;
	typedef long			D3DRMTextureQuality;
	typedef long			D3DRMAnimationOptions;
	typedef long			D3DRMWrapType;		
	typedef long			D3DRMColorSource;		
	typedef long			D3DRMMaterialMode;	
	typedef long			D3DRMSortMode;		
	typedef long			D3DRMFrameConstraint;	
	typedef long			D3DRMZbufferMode;
	typedef long			D3DRMXofFormat;		
   	typedef long             D3DRMLoadFlags;
	//typedef long			D3DRMUserVisualReason;
	

	//FLAGS
	#define DBOOLFlags						long
	#define	dplConnectionFlags			long
	#define	dpGroupFlags				long
	#define DPPlayerFlags				long
	#define DPEnumConnectionFlags		long
	#define DPEnumGroupFlags			long
	#define DPEnumPlayerFlags			long
	#define DPEnumSessionFlags			long
	#define DPCapsFlags					long
	#define DPGetFlags					long
	#define DPGetCapsFlags				long
	#define DPOpenFlags					long
	#define DPMessageQueueFlags			long
	#define DPReceiveFlags				long
	#define DPSendFlags					long
	#define DPSetFlags					long
	#define DPLMsg						long
	#define DPLWait						long
	#define DPSessionFlags				long
	#define D3DDPFlags					long
	#define D3DNextFlags				long
	#define D3DClearFlags				long
	#define D3DTransformFlags			long
	#define D3DTextureStageStateType    long
	#define D3DTextureStageSingle		long
	#define D3DProcessVerticesFlags		long
	#define D3DStateBlockType			long
	#define DDLockFlags					long
	#define D3DVopFlags					long
	#define DDPCapsFlags				long
	#define DPConnectFlags				long
	#define DDPCapsFlags				long
	#define DDEDMFlags					long
	#define DDSCLFlags					long
	#define DDBltFlags					long
	#define DDBltFastFlags				long
	#define DDFlipFlags					long
	#define DDOverZFlags				long
	#define DDOverFlags					long
	#define DDEnumOverFlags				long
	#define DDEnumOverlayZFlags			long
	#define DDGFSFlags					long
	#define DDGfsFlags					long
	#define DDCKeyFlags					long
	#define DDSGRFlags					long
	#define DDEnumSurfacesFlags			long
	#define DDBitDepthFlags				long
	#define DDSDMFlags					long
	#define DDWaitVBFlags				long
	#define DDDeviceIDFlags				long
	
	#define	D3DDevInfoId				long
	#define D3DVertexComponent			long	
	#define D3DTAFlags					long
	#define D3DVTXPCapsFlags			long

	#define	D3DRMViewportClearFlags		long
	#define D3DRMLoadFlags				long
	#define D3DRMCreateDeviceFlags		long
	#define D3DRMHandedness				long
	#define D3DRMCallbackOrderFlags 	long
	#define D3DRMFogMethod				long
	#define D3DRMFogMode				long
	#define D3DRMTravesalFlags			long
	#define D3DRMZBufferMode			long	
	#define D3DRMRayPickFlags			long
	#define D3DRMAddFacesFlags			long
	#define D3DRMAddMeshbuilderFlags	long
	#define D3DRMAddTrianglesVt			long
	#define D3DRMAddMeshBuilderFlags	long
	#define D3DRMGenerateNormalsFlags	long
	#define D3DRMParentingFlags			long
	#define D3DRMFptfFlags				long
	#define D3DRMRenderModeFlags		long
	#define D3DRMWireFrameFlags			long
	#define D3DRMTextureChangedFlags	long
	#define D3DRMTextureCacheFlags		long
	#define D3DRMTraversalFlags			long
	#define D3DRMInterpolationFlags		long
	#define D3DRMShadowFlags			long
		
	#define DSSCLFlags					long
	#define DSSpeakerFlags				long
	#define DSBStatusFlags				long
	#define DSBPlayFlags				long
	#define DSBLockFlags				long
	#define DS3DApplyFlags				long
	#define DS3DModeFlags				long
	#define DSCBStatusFlags				long
	#define DSCBStartFlags				long
	#define DSCBLockFlags				long
	
	#define DIEnumDevicesFlags			long
	#define DIDeviceType				long
	#define DIDFTFlags					long
	#define DIDGDDFlags					long
	#define DIPHFlags					long
	#define DISCLFlags					long
	#define diDataFormatFlags			long
    #define diCommonDataFormats			long
	#define DIDeviceObjInstanceFlags	long
	#define disddFlags					long

	#define DIEFTFLAGS 					long
	#define DIEFTFLAGS 					long
	#define DIGFFSFLAGS 				long
	#define DISFFCFLAGS 				long
	#define DIEPFLAGS 					long
	#define DIEFFFLAGS 					long
	
	
#endif

//- clone is a keyword in Java so we need to rename it to cloneObject
//	consider renaming the C entry point
#ifdef C_ONLY
	#include "directxstruct.idl"
	#define cloneObject clone
#else
    #include "directvbstruct.idl"
#endif 



#ifdef JAVA_ONLY
	#define AVERT float
	#define AD3DRECT long
	#define AD3DLIGHTDATA long
	#define APAL Byte
	#define ATYPE Byte
	#define ABYTE Byte
	#define ALONG long

#else
	#define AVERT void
	#define ATYPE void
	#define ABYTE void
	#define ALONG void

	#define AD3DRECT D3DRECT
	#define AD3DLIGHTDATA D3DLIGHTDATA
	#define APAL PALETTEENTRY

#endif



///////////////////////////////////////////////////////////////////////////
// 
// DirectPlay and DirectPlayLobby Interfaces 
// 
///////////////////////////////////////////////////////////////////////////

	[
		object,
		uuid(9F76FF05-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayAddress Interface"),
		pointer_default(unique),
		local,
		helpcontext(300200)
	]
	interface DirectPlayAddress : IUnknown	
	{
		import "oaidl.idl";

		[hidden]	[helpcontext(300201)]		HRESULT SetAddress([in] long pAddress,[in] long length);
		[hidden]	[helpcontext(300202)]		HRESULT GetAddress([out] long *pAddress,[out] long * length);
	};



	[
		object,
		uuid(9F76FF06-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayLobbyConnection Interface"),
		pointer_default(unique),
		local,
		helpcontext(300400)

	]
	interface DirectPlayLobbyConnection : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT GetConnectionStruct([out] long *connect);
		[hidden]		HRESULT SetConnectionStruct([in] long connect);
		[helpcontext(300401)] 	HRESULT SetFlags([in] DPLConnectionFlags flags);
		[helpcontext(300402)]	HRESULT GetFlags([out,retval] DPLConnectionFlags *ret);
		[helpcontext(300403)] 	HRESULT SetSessionDesc([in] DirectPlaySessionData *sessionDesc);
		[helpcontext(300404)] 	HRESULT GetSessionDesc([out,retval]  DirectPlaySessionData **sessionDesc);
		[helpcontext(300405)]  HRESULT SetGuidSP([in] BSTR guid);
		[helpcontext(300406)]	HRESULT GetGuidSP([out,retval] BSTR *guid);
		[helpcontext(300407)]	HRESULT SetAddress([in] DirectPlayAddress *address);
		[helpcontext(300408)]	HRESULT GetAddress([out,retval] DirectPlayAddress **address);
		[helpcontext(300409)]	HRESULT SetPlayerShortName([in] BSTR name);
		[helpcontext(300410)]	HRESULT GetPlayerShortName([out,retval] BSTR *name);
		[helpcontext(300411)]	HRESULT SetPlayerLongName([in] BSTR name);
		[helpcontext(300412)]	HRESULT GetPlayerLongName([out,retval] BSTR *name);
	};


	[
		object,
		uuid(9F76FF0A-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayEnumConnections Interface"),
		pointer_default(unique),
		local,
		helpcontext(300600)
	]
	interface DirectPlayEnumConnections : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(300601)]		HRESULT GetAddress([in] long index, [out,retval] DirectPlayAddress **retV);
		[helpcontext(300602)]		HRESULT GetFlags([in] long index, [out,retval] long *retV);
		[helpcontext(300603)]		HRESULT GetGuid([in] long index, [out,retval] BSTR *retV);
		[helpcontext(300604)]		HRESULT GetName([in] long index, [out,retval] BSTR *retV);
		[helpcontext(300605)]		HRESULT GetCount([out,retval]long *count);
	};



	[
		object,
		uuid(9F76FF0B-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayEnumPlayers2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(300800)
	]
	interface DirectPlayEnumPlayers2 : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(300801)]		HRESULT GetCount([out,retval]long *count);
		[helpcontext(300802)]		HRESULT GetFlags([in] long index, [out,retval]long *count);
		[helpcontext(300803)]		HRESULT GetType([in] long index, [out,retval]long *count);
		[helpcontext(300804)]		HRESULT GetDPID([in] long index, [out,retval]long *count);
		[helpcontext(300805)]		HRESULT GetShortName([in] long index, [out,retval] BSTR *retV);
		[helpcontext(300806)]		HRESULT GetLongName([in] long index, [out,retval] BSTR *retV);

	};

	[
		object,
		uuid(9F76FF0C-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayEnumSessions2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(301000)
	]
	interface DirectPlayEnumSessions2 : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(301001)]		HRESULT GetItem( [in]long index, [out,retval] DirectPlaySessionData **retval);
                [helpcontext(301002)]           HRESULT GetCount([out,retval]long *count);
	};



	[
		object,
		uuid(9F76FF0D-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayEnumServiceProviders Interface"),
		pointer_default(unique),
		hidden,
		local,
		helpcontext(301200)
	]
	interface DirectPlayEnumServiceProviders : IUnknown 
	{
		import "oaidl.idl";
		[helpcontext(301201)]		HRESULT GetCount([out,retval]long *count);
		[helpcontext(301202)]		HRESULT GetName([in] long index,[out,retval] BSTR *ret);
		[helpcontext(301203)]		HRESULT GetGuid([in] long index,[out,retval] BSTR *ret);
		[helpcontext(301204)]		HRESULT GetVersion([in] long index,[in] long *majorVersion,[in,out] long *minorVersion);
	};

	[
		object,
		uuid(9F76FF0E-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayEnumLocalApplications Interface"),
		pointer_default(unique),
		local,
		helpcontext(301400)
	]
	interface DirectPlayEnumLocalApplications : IUnknown 
	{
		import "oaidl.idl";
 		[helpcontext(301401)]		HRESULT GetCount([out,retval]long *count);
		[helpcontext(301402)]		HRESULT GetName([in] long index,[out,retval] BSTR *ret);
		[helpcontext(301403)]		HRESULT GetGuid([in] long index,[out,retval] BSTR *ret);
	};

	[
		object,
		uuid(9F76FF11-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayMessage Interface"),
		pointer_default(unique),
		local,
		helpcontext(301600)
	]
	interface DirectPlayMessage : IUnknown	
	{
		import "oaidl.idl";

		[helpcontext(301601)]		HRESULT WriteGuid([in] BSTR val);
		[helpcontext(301602)]		HRESULT ReadGuid([out,retval] BSTR *val);

		[helpcontext(301603)]		HRESULT WriteString([in] BSTR val);
		[helpcontext(301604)]		HRESULT ReadString([out,retval] BSTR *val);
		
		[helpcontext(301605)]		HRESULT WriteLong([in] long val);
		[helpcontext(301606)]		HRESULT ReadLong([out,retval] long *val);

		[helpcontext(301607)]		HRESULT WriteShort([in] short val);
		[helpcontext(301608)]		HRESULT ReadShort([out,retval] short *val);

		[helpcontext(301609)]		HRESULT WriteSingle([in] float val);
		[helpcontext(301610)]		HRESULT ReadSingle([out,retval] float *val);

		[helpcontext(301611)]		HRESULT WriteDouble([in] double val);
		[helpcontext(301612)]		HRESULT ReadDouble([out,retval] double *val);

		[helpcontext(301613)]		HRESULT WriteByte([in] Byte val);
		[helpcontext(301614)]		HRESULT ReadByte([out,retval] Byte *val);

		[helpcontext(301615)]		HRESULT MoveToTop();
		[helpcontext(301616)]		HRESULT Clear();
		[helpcontext(301617)]		HRESULT GetMessageSize([out,retval] long *ret);
		[helpcontext(301618)]		HRESULT GetMessageData([in,out] void *userDefinedType);		
		[helpcontext(301619)]		HRESULT SetMessageData([in] void *userDefinedType,[in] long size);		

		[hidden]					HRESULT GetPointer([out,retval] long *ret);

		//new methods need to be put in master help id list
		[helpcontext(301620)]			HRESULT ReadSysMsgConnection([out,retval] DirectPlayLobbyConnection **ret);
		[helpcontext(301621), hidden]			HRESULT ReadSysMsgSessionDesc([out,retval] DirectPlaySessionData **ret);
		[helpcontext(301622), hidden]			HRESULT ReadSysMsgData([out,retval] BSTR *ret);
		[helpcontext(301623)]			HRESULT ReadSysChatString([out,retval] BSTR *ret);
		[helpcontext(301624)]			HRESULT MoveToSecureMessage	();
	};


	[
		object,
		uuid(9F76FF12-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlaySessionData Interface"),
		pointer_default(unique),
		local,
		helpcontext(301800)
	]
	interface DirectPlaySessionData : IUnknown	
	{
		import "oaidl.idl";
		[helpcontext(301801)]		HRESULT SetGuidInstance([in] BSTR guid);
		[helpcontext(301802)]		HRESULT GetGuidInstance([out,retval] BSTR *guid);
		[helpcontext(301803)]		HRESULT SetGuidApplication([in] BSTR guid);
		[helpcontext(301804)]		HRESULT GetGuidApplication([out,retval] BSTR *guid);
		[helpcontext(301805)]		HRESULT SetMaxPlayers([in] long val);
		[helpcontext(301806)]		HRESULT GetMaxPlayers([out,retval] long *val);
		[hidden,helpcontext(301807)] HRESULT SetCurrentPlayers([in] long val);
		[helpcontext(301808)]		HRESULT GetCurrentPlayers([out,retval] long *val);
		[helpcontext(301809)]		HRESULT SetSessionName([in] BSTR val);
		[helpcontext(301810)]		HRESULT GetSessionName([out,retval] BSTR *val);
		[helpcontext(301811)]		HRESULT SetSessionPassword([in] BSTR val);
		[helpcontext(301812)]		HRESULT GetSessionPassword([out,retval] BSTR *val);
		[helpcontext(301813)]		HRESULT SetUser1([in] long val);
		[helpcontext(301814)]		HRESULT GetUser1([out,retval] long *val);
		[helpcontext(301815)]		HRESULT SetUser2([in] long val);
		[helpcontext(301816)]		HRESULT GetUser2([out,retval] long *val);
		[helpcontext(301817)]		HRESULT SetUser3([in] long val);
		[helpcontext(301818)]		HRESULT GetUser3([out,retval] long *val);
		[helpcontext(301819)]		HRESULT SetUser4([in] long val);
		[helpcontext(301820)]		HRESULT GetUser4([out,retval] long *val);		
		
		[helpcontext(301821)]		HRESULT SetFlags([in] DPSessionFlags val);
		[helpcontext(301822)]		HRESULT GetFlags([out,retval] long *val);		
		[hidden,helpcontext(301823)] HRESULT GetData([out] void *val);

	};




	[
		object,
		uuid(9F76FF0F-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirectPlay4 Interface"),
		pointer_default(unique),
		local,
		helpcontext(302000)
	]
	interface DirectPlay4 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// *** DirectPlay4 methods ***
		//
		[helpcontext(302001)]		HRESULT AddGroupToGroup([in] long ParentGroupId, [in] long GroupId);
		[helpcontext(302002)]		HRESULT AddPlayerToGroup([in] long groupId, [in] long playerId);
		[helpcontext(302003)]		HRESULT CancelMessage([in] long msgid);				//FLAGS ALWAYS 0
		[helpcontext(302004)]		HRESULT CancelPriority([in] long minPrority ,[in] long maxPriority); //FLAGS ALWAYS 0
		[helpcontext(302005)]		HRESULT Close();		
		
		[helpcontext(302006)]		HRESULT CreateGroup([in] BSTR friendlyName, [in] BSTR formalName, [in] DPGroupFlags flags,
							[out,retval] long *v1);
		[helpcontext(302007)]		HRESULT CreateGroupInGroup([in] long parentid,[in] BSTR friendlyName, [in] BSTR formalName,
							[in] DPGroupFlags flags, [out,retval] long *v1);
													
		[helpcontext(302008)]		HRESULT CreatePlayer([in] BSTR friendlyName, [in] BSTR formalName,
							[in] long receiveEvent,	[in] DPPlayerFlags flags,
							[out,retval] long *v1);
		[helpcontext(302009)]		HRESULT DeleteGroupFromGroup([in] long groupParentId, [in] long groupId);
		[helpcontext(302010)]		HRESULT DeletePlayerFromGroup([in] long groupId, [in] long playerId);
		[helpcontext(302011)]		HRESULT DestroyGroup([in] long groupId);
		[helpcontext(302012)]		HRESULT DestroyPlayer([in] long playerId);
		[helpcontext(302013)]		HRESULT GetDPEnumConnections([in] BSTR guid,[in] DPEnumConnectionFlags flags, [out,retval] DirectPlayEnumConnections **retVal);
		[helpcontext(302014)]		HRESULT GetDPEnumGroupPlayers([in] long groupId, [in] BSTR sessionGuid, [in] DPEnumPlayerFlags flags, [out,retval] DirectPlayEnumPlayers2 **retVal);
		[helpcontext(302015)]		HRESULT GetDPEnumGroups( [in] BSTR sessionGuid, [in] DPEnumGroupFlags flags, [out,retval] DirectPlayEnumPlayers2 **retVal);
		[helpcontext(302016)]		HRESULT GetDPEnumGroupsInGroup( [in] long groupId,[in] BSTR sessionGuid, [in] DPEnumGroupFlags flags, [out,retval] DirectPlayEnumPlayers2 **retVal);
		[helpcontext(302017)]		HRESULT GetDPEnumPlayers( [in] BSTR sessionGuid, [in] DPEnumPlayerFlags flags, [out,retval] DirectPlayEnumPlayers2 **retVal);

		[helpcontext(302018)]		HRESULT GetDPEnumSessions([in] DirectPlaySessionData *sessionDesc, [in] long timeOut, [in] DPEnumSessionFlags flags, [out,retval] DirectPlayEnumSessions2 **retVal);
		
		[helpcontext(302019)]		HRESULT GetCaps([in,out] DPCAPS *caps, [in] dpGetCapsFlags flags);



		[helpcontext(302020)]		HRESULT GetGroupData([in] long groupId,[in] DPGetFlags flags,[out,retval] BSTR *ret);

		[helpcontext(302021)]		HRESULT GetGroupFlags([in] long groupId,	[out,retval]  DPGroupFlags * flags);

		[helpcontext(302022)]		HRESULT GetGroupLongName([in] long groupId, [out,retval] BSTR *name);
		[helpcontext(302023)]		HRESULT GetGroupShortName([in] long groupId, [out,retval] BSTR *name);
		[helpcontext(302024)]		HRESULT GetGroupParent([in] long groupId,[out,retval] long* ret);

		[helpcontext(302025)]		HRESULT GetGroupOwner([in] long groupId, [out,retval] long * ret);

		[helpcontext(302026)]		HRESULT GetMessageCount([in] long playerId, [out,retval] long *count);
		[helpcontext(302027)]		HRESULT GetMessageQueue([in] long from, [in] long to, [in] DPMessageQueueFlags flags, [in,out] long *nMessage,[in,out] long *nBytes);
		[helpcontext(302028)]		HRESULT GetPlayerAccountId([in] long playerid,[out,retval] BSTR *acctid);		
		[helpcontext(302029)]		HRESULT GetPlayerAddress([in] long playerId, [out,retval] DirectPlayAddress **ret);
		[helpcontext(302030)]		HRESULT GetPlayerCaps([in] long playerId, [out] DPCAPS *caps, [in] dpGetCapsFlags flags);
		[helpcontext(302031)]		HRESULT GetPlayerData([in] long playerId, [in] DPGetFlags flags, [out,retval] BSTR *ret);
		[helpcontext(302032)]		HRESULT GetPlayerFlags([in] long playerid,[out,retval] DPPlayerFlags *retflags);


		// docdoc GetPlayerName replaced by two below.
		[helpcontext(302033)]		HRESULT GetPlayerFormalName([in] long playerId, [out,retval] BSTR *name);
		[helpcontext(302034)]		HRESULT GetPlayerFriendlyName([in] long playerId, [out,retval] BSTR *name);

		[helpcontext(302035)]		HRESULT GetSessionDesc([in,out] DirectPlaySessionData **sessionDesc);
				
		[helpcontext(302036)]		HRESULT InitializeConnection([in] DirectPlayAddress *address);  //flags not used

		[helpcontext(302037)]		HRESULT Open([in,out] DirectPlaySessionData *sessionDesc,
							[in] DPOpenFlags flags); //flags must be zero

		
		[helpcontext(302038)]		HRESULT Receive([in, out] long* fromPlayerId, [in, out] long* toPlayerId, 
							[in] DPReceiveFlags flags, [out,retval] DirectPlayMessage **ret);
		[hidden,helpcontext(302039)]	HRESULT ReceiveSize([in, out] long* fromPlayerId, [in, out] long* toPlayerId,
							[in] DPReceiveFlags flags, [out,retval] int* dataSize);

		[helpcontext(302040)]		HRESULT SecureOpen(
							[in] DirectPlaySessionData *sessiondesc,
							[in] DPOpenFlags flags,
							[in] DPSECURITYDESC *security,
							[in] DPCREDENTIALS  *credentials);

		[helpcontext(302041)]		HRESULT Send([in] long fromPlayerId, [in] long toPlayerId,  
							[in] DPSendFlags flags, [in] DirectPlayMessage *msg);
		[helpcontext(302042)]		HRESULT SendChatMessage([in] long fromPlayerId, [in] long toPlayerId,  
							[in] DPSendFlags flags, [in] BSTR message);
		[helpcontext(302043)]		HRESULT SendEx([in] long fromPlayerId, [in] long toPlayerId,  
							[in] DPSendFlags flags, [in] DirectPlayMessage *msg, [in] long priority, 
							[in] long timeout, [in] long context,[out,retval] long *messageid);

		[helpcontext(302044)]		HRESULT CreateMessage([out,retval] DirectPlayMessage **msg);

		[helpcontext(302045)]		HRESULT SetGroupConnectionSettings([in] long id,[in] DirectPlayLobbyConnection *connection); //flags must be zero
		
		[helpcontext(302046)]		HRESULT SetGroupData([in] long groupId, [in] BSTR data, [in] DPSetFlags flags);
		[helpcontext(302047)]		HRESULT SetGroupName([in] long groupId, [in] BSTR friendlyName, 
							[in] BSTR formalName, [in] DPSetFlags flags); 

		[helpcontext(302048)]		HRESULT SetGroupOwner([in] long groupId, [in] long ownerId);

		[helpcontext(302049)]		HRESULT SetPlayerData([in] long playerId, [in] BSTR data, [in] DPSetFlags flags);

		[helpcontext(302050)]		HRESULT SetPlayerName([in] long playerId, [in] BSTR friendlyName, [in] BSTR formalName, [in] DPSetFlags flags); 

		[helpcontext(302051)]		HRESULT SetSessionDesc([in] DirectPlaySessionData *sessionDesc); //flags not used
		
		[helpcontext(302052)]		HRESULT StartSession([in] long id); //flags not used

		[helpcontext(302053)]		HRESULT CreateSessionData([out,retval] DirectPlaySessionData **sessionDesc);
	};



	[
		object,
		uuid(9F76FF10-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectPlayLobby3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(302200)
	]
	interface DirectPlayLobby3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(302201)]		HRESULT Connect([in] DPConnectFlags flags, [out,retval] DirectPlay4 **directPlay);


		[helpcontext(302202)]		HRESULT GetDPEnumLocalApplications( [out,retval] DirectPlayEnumLocalApplications **retVal); //flags are zero


		[helpcontext(302203)]		HRESULT GetConnectionSettings([in] long applicationId, 
							[out,retval] DirectPlayLobbyConnection **connection); 


		[helpcontext(302204)]		HRESULT ReceiveLobbyMessage([in] long applicationId,
									[in,out] long *messageFlags,
									[out,retval] DirectPlayMessage **data);
		[hidden,helpcontext(302205)]		HRESULT ReceiveLobbyMessageSize([in] long applicationId,
									[in,out] long *messageFlags,
									[out,retval] long *dataSize);

		//TODO CONSIDER CHANGING THIS!!!
		[helpcontext(302206)]		HRESULT RunApplication( 
							[in] DirectPlayLobbyConnection *connection,
							[in] long receiveEvent,
							[out,retval] long * applicationId);

		[helpcontext(302207)]		HRESULT SendLobbyMessage([in] DPLMsg flags,
								[in] long applicationId,
								[in] DirectPlayMessage *msg);
								

		[helpcontext(302208)]		HRESULT SetConnectionSettings([in] long applicationId, 
									  [in] DirectPlayLobbyConnection *connection);

		[helpcontext(302209)]		HRESULT SetLobbyMessageEvent([in] long applicationId, [in] long receiveEvent);
		[helpcontext(302210)]		HRESULT RegisterApplication( [in] DPAPPLICATIONDESC2 *ApplicationInfo); 
		[helpcontext(302211)]		HRESULT UnregisterApplication( [in] BSTR guidApplication); 
		[helpcontext(302212)]		HRESULT WaitForConnectionSettings([in] DPLWait flags);
		[helpcontext(302213)]		HRESULT CreateMessage([out,retval] DirectPlayMessage **msg);
		[helpcontext(302214)]		HRESULT CreateConnectionData([out,retval] DirectPlayLobbyConnection **connection);

		[helpcontext(302215)]		HRESULT CreateINetAddress([in] BSTR addr,[in] int port,[out,retval] DirectPlayAddress **ret);
		[helpcontext(302216)]		HRESULT CreateComPortAddress([in] long port,[in] long baudRate, [in] long stopBits, [in] long parity, [in] long flowcontrol,[out,retval] DirectPlayAddress **ret);
		[helpcontext(302217)]		HRESULT CreateLobbyProviderAddress([in] BSTR guid,[out,retval] DirectPlayAddress **ret);
		[helpcontext(302218)]		HRESULT CreateServiceProviderAddress([in] BSTR guid,[out,retval] DirectPlayAddress **ret);
		[helpcontext(302219)]		HRESULT CreateModemAddress([in] BSTR modem, [in] BSTR phone, [out,retval] DirectPlayAddress **ret);
		[helpcontext(302220)]		HRESULT CreateIPXAddress([out,retval] DirectPlayAddress **ret);
		[helpcontext(302221),hidden]		HRESULT CreateCustomAddress([in] long size, [in] void *data,[out,retval] DirectPlayAddress **ret);
		
		[helpcontext(302222)]		HRESULT GetModemName([in] long index,[out,retval] BSTR *name);
		[helpcontext(302223)]		HRESULT GetModemCount([out,retval] long *count);
	};
	

///////////////////////////////////////////////////////////////////////////
//
// RM INTERFACE CALLBACKS
//
///////////////////////////////////////////////////////////////////////////


	[	object,
		uuid(BBD5AD04-8E91-11d1-8808-00C04FC2C602),	// Direct44
		helpstring("Direct3DRMEnumerateObjectsCallback Interface"),
		pointer_default(unique),
		helpcontext(302400)
	]	
	interface Direct3DRMEnumerateObjectsCallback : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(302401)]		HRESULT CallbackRMEnumerateObjects([in] Direct3DRMObject *object, [in] USERARG *userArgument);
	};
	
	
	[	object,
		uuid(BBD5AD03-8E91-11d1-8808-00C04FC2C602),  //Direct54
		helpstring("Direct3DRMCallback Interface"),
		pointer_default(unique),
		helpcontext(302600)
	]
	interface Direct3DRMCallback : IUnknown
	{
		import "oaidl.idl";

		// This function is called after the object has been destroyed,
		// so this function cannot be called with the object as argument.
		[helpcontext(302601)]		HRESULT CallbackRMDestroyObject([in] USERARG *args);
	};

	/*
	[	object,
		uuid(BBD5AD06-8E91-11d1-8808-00C04FC2C602),	
		helpstring("Direct3DRMUserVisualCallback Interface"),
		pointer_default(unique),
		helpcontext(302800)
	]	
	interface Direct3DRMUserVisualCallback : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(302801)]		HRESULT CallbackRMUserVisual([in] Direct3DRMUserVisual *uv,
				  [in] USERARG *userArgument, [in] D3DRMUserVisualReason r,
							[in] Direct3DRMDevice3 *d, [in] Direct3dRMViewport2 *v, [out,retval] DBOOLFlags *retv);
	};
	*/
	
	///////////////////////////////////////////////////////////////////////////
	[	object,
		uuid(BBD5AD0A-8E91-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMLoadCallback Interface"),			
		pointer_default(unique),
		helpcontext(303000)
	]	
	interface Direct3DRMLoadCallback : IUnknown
	{
		import "oaidl.idl";		
		[helpcontext(303001)]		HRESULT CallbackRMLoad([in] Direct3DRMObject **Obj, [in] BSTR guid, [in] USERARG *userArgument);
	};

	


	///////////////////////////////////////////////////////////////////////////
	[	object,
		uuid(BBD5AD16-8E91-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMLoadTextureCallback3 Interface"),
		pointer_default(unique),
		helpcontext(303200)
	]	
	interface Direct3DRMLoadTextureCallback3 : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(303201)]		HRESULT CallbackRMLoadTexture([in] BSTR textureName, [in] USERARG *userArgument,
				[out, retval] Direct3DRMTexture3 **retv);
	};


///////////////////////////////////////////////////////////////////////////
// 
// Direct3DIM
// 
///////////////////////////////////////////////////////////////////////////



	[
		object,		
		uuid(9F76FDD5-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3D7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(303400)
	]
	interface Direct3D7 : IUnknown
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);		


		[helpcontext(303401)]		HRESULT CreateDevice([in] BSTR  guid, DirectDrawSurface7 *surf, [out, retval] Direct3DDevice7 **ret);						
		[helpcontext(303402)]		HRESULT CreateVertexBuffer([in] D3DVERTEXBUFFERDESC *desc,[in] D3DDPFlags flags,[out,retval] Direct3dVertexBuffer7 **f);
		[helpcontext(303403)]		HRESULT EvictManagedTextures();		
		[helpcontext(303404)]		HRESULT GetDevicesEnum([out,retval] Direct3DEnumDevices **retv);						
		[helpcontext(303405)]		HRESULT GetDirectDraw([out,retval] DirectDraw7 **retv);		
		[helpcontext(303406)]		HRESULT GetEnumZBufferFormats([in] BSTR guid, [out,retval] Direct3DEnumPixelFormats **retv);		
		

	};

	[
		object,
		local,
		uuid(9F76FDD7-8E92-11d1-8808-00C04FC2C602),	
		helpstring("Direct3DDevice7 Interface"),
		pointer_default(unique),
		helpcontext(303600)
	]
	interface Direct3DDevice7 : IUnknown
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(303601)]		HRESULT ApplyStateBlock([in] long blockHandle);

		[helpcontext(303602)]		HRESULT BeginScene();		
		[helpcontext(303603)]		HRESULT BeginStateBlock();
		[helpcontext(303604)]		HRESULT CaptureStateBlock([in] long blockHandle);
		[helpcontext(303605)]		HRESULT Clear([in] long count, [in] SAFEARRAY(D3DRECT) *recs, [in] d3dClearFlags flags, [in] long color,[in] float z,[in] long stencil);
		[helpcontext(303606)]		HRESULT ComputeSphereVisibility(D3DVECTOR *center,float *radius ,[out,retval] long *returnVal);
		[helpcontext(303607)]		HRESULT DeleteStateBlock([in] long blockHandle);

		[helpcontext(303608)]		HRESULT DrawIndexedPrimitive(
				[in] D3DPrimitiveType  d3dpt,[in] d3dFVFFlags d3dfvf, 
				[in] AVERT *vertices,[in] long VertexCount,
				[in] SAFEARRAY(short) *indices, [in] long IndicesCount,
				[in] D3DDPFlags flags);
	
		[helpcontext(303609)]		HRESULT DrawIndexedPrimitiveVB([in] D3DPrimitiveType  d3dpt,
				[in] Direct3DVertexBuffer7 *vertexBuffer, 
				[in] long startVertex,
				[in] long numVertices,
				[in] SAFEARRAY(short) *indexArray,
				[in] long indexcount,
				[in] D3DDPFlags flags);
		
		[helpcontext(303610)]		HRESULT DrawPrimitive(
			[in] D3DPrimitiveType  d3dpt,[in] d3dFVFFlags d3dfvf, 
			[in] AVERT *vertices, [in] long VertexCount,
			[in] D3DDPFlags flags);

		[helpcontext(303611)]		HRESULT DrawPrimitiveVB([in] D3DPrimitiveType  d3dpt,
				[in] Direct3DVertexBuffer7 *vertexBuffer, 	
				[in] long startVertex,
				[in] long numVertices,
				[in] D3DDPFlags flags);				
		//[helpcontext(303612)]		HRESULT DuplicateStateBlock([in] long hndl,[out,retval] long * ret);
		[helpcontext(303613)]		HRESULT EndScene();
		[helpcontext(303614)]		HRESULT EndStateBlock([in] long *blockHandle);
		
		[helpcontext(303615)]		HRESULT GetCaps( [in,out] D3DDEVICEDESC7 *desc);
		[helpcontext(303616)]		HRESULT GetClipStatus( [in,out] D3DCLIPSTATUS *clipStatus);
		[helpcontext(303617)]		HRESULT GetDirect3D( [out, retval] Direct3d7 **dev);    	
		[helpcontext(303618)]		HRESULT GetLight([in] long LightIndex, [in,out] D3DLIGHT7 *Light);
		[helpcontext(303619)]		HRESULT GetLightEnable([in] long LightIndex, [out,retval] VARIANT_BOOL *b);
		[helpcontext(303620)]		HRESULT GetMaterial([in,out] D3DMATERIAL7 *Material);
		[helpcontext(303621)]		HRESULT GetRenderState([in]D3DRenderStateType state ,[out,retval] long *renderstate);		
		[helpcontext(303622)]		HRESULT GetRenderTarget([out,retval] DirectDrawSurface7 **ppval);		

		[helpcontext(303623)]		HRESULT GetTexture([in] long stage,[out,retval] DirectDrawSurface7 **retv);
		[helpcontext(303624)]		HRESULT GetTextureFormatsEnum([out,retval] Direct3DEnumPixelFormats **retval);
        [helpcontext(303625)]		HRESULT GetTextureStageState([in]long stage,[in] D3DTextureStageStateType state,[out,retval] long *val);
		[helpcontext(303626)]		HRESULT GetTransform([in] D3DTransformStateType transformType,[in,out] D3DMATRIX *matrix);
		[helpcontext(303627)]		HRESULT GetViewport([in,out] D3DVIEWPORT7 *viewport);
		[helpcontext(303628)]		HRESULT LightEnable([in] long LightIndex, [in] VARIANT_BOOL bEnable);
		[helpcontext(303629)]		HRESULT Load([in] DirectDrawSurface7 *DestTex,[in] long xDest, [in] long yDest,[in] DirectDrawSurface7 *SrcTex, [in] RECT *rcSrcRect,[in] long flags);
		[helpcontext(303630)]		HRESULT MultiplyTransform([in] D3DTransformStateType dstTransfromStateType,[in,out] D3DMATRIX *matrix);		
		//[helpcontext(303631)]		HRESULT OverlayStateBlock([in] long blockHandle);
		[helpcontext(303632)]		HRESULT PreLoad([in] DirectDrawSurface7 *texture );
		
		[helpcontext(303633)]		HRESULT SetClipStatus( [in] D3DCLIPSTATUS *clipStatus);		
		[helpcontext(303634)]		HRESULT SetLight([in] long LightIndex, [in] D3DLIGHT7 *Light);		
		[helpcontext(303635)]		HRESULT SetMaterial([in] D3DMATERIAL7 *mat);
		[helpcontext(303636)]		HRESULT SetRenderState([in]D3DRenderStateType state,[in] long renderstate);		
		[helpcontext(303637)]		HRESULT SetRenderTarget([in] DirectDrawSurface7 *surface);		
		[helpcontext(303638)]		HRESULT SetTexture([in] long stage,[in] DirectDrawSurface7 *texture);
        [helpcontext(303639)]		HRESULT SetTextureStageState([in]long stage,[in] D3DTextureStageStateType state,[in] long value);
		[helpcontext(303640)]		HRESULT SetTransform([in] D3DTransformStateType transformType,[in] D3DMATRIX *matrix);		
		[helpcontext(303641)]		HRESULT SetViewport([in] D3DVIEWPORT7 *viewport);
		[helpcontext(303642)]		HRESULT ValidateDevice([out,retval] long *passes);
		
		
		[helpcontext(303643)]		HRESULT SetTextureStageStateSingle([in]long stage,[in] D3DTextureStageSingle state,[in] float value);		
		[helpcontext(303644)]		HRESULT GetTextureStageStateSingle([in]long stage,[in] D3DTextureStageSingle state,[out,retval] float *val);
		[helpcontext(303645)]		HRESULT GetInfo([in] D3DDevInfoId lDevInfoID,[in,out] void * DevInfoType,[in] long lSize);
		[helpcontext(303646)]		HRESULT SetRenderStateSingle([in]D3DRenderStateSingle state,[in] float val);		
		[helpcontext(303647)]		HRESULT GetRenderStateSingle([in]D3DRenderStateSingle state ,[out,retval] float *val);		
		[helpcontext(303648)]		HRESULT GetDeviceGuid([out,retval] BSTR *ret);

		//check help
		[helpcontext(303649)]		HRESULT CreateStateBlock([in]	D3DStateBlockType d3dsbType, [out,retval] long *blockHandle);
		[helpcontext(303650)]		HRESULT SetClipPlane([in] long Index, [in] float A, [in] float B ,[in] float C, [in] float D);
		[helpcontext(303651)]		HRESULT GetClipPlane([in] long Index, [in,out] float *A, [in,out] float *B ,[in,out] float *C, [in,out] float *D);

	};




	[
		object,
		uuid(9F76FDDA-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DVertexBuffer7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(303800)
	]
	interface Direct3DVertexBuffer7 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(303801)]		HRESULT GetVertexBufferDesc([in,out] D3DVERTEXBUFFERDESC *desc);
		[helpcontext(303802)]		HRESULT GetVertices([in] long startIndex, [in] long count,[in] void *verts);
		[helpcontext(303803)]		HRESULT Lock([in] DDLockFlags flags);
		[helpcontext(303804)]		HRESULT Optimize([in] Direct3DDevice7 *dev);	//flags not used		
		[helpcontext(303805)]		HRESULT ProcessVertices([in] D3DVopFlags vertexOp,
								[in] long destIndex,
								[in] long count,
								[in] Direct3DVertexBuffer7 *srcBuffer,
								[in] long srcIndex,
								[in] Direct3DDevice7 *dev,
								[in] D3DProcessVerticesFlags flags); //has flags set to zero
		[helpcontext(303806)]		HRESULT SetVertices([in] long startIndex, [in] long count,[in] void *verts);
		[helpcontext(303807)]		HRESULT Unlock();		
		[hidden]				HRESULT SetVertexSize([in] long vertexSizeInBytes);
		
	};


	[
		object,		
		uuid(9F76FDD6-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DEnumPixelFormats Interface"),
		pointer_default(unique),
		local,
		helpcontext(304000)
	]
	interface Direct3DEnumPixelFormats : IUnknown{
		[helpcontext(304001)]		HRESULT GetItem([in] long index, [in,out] DDPIXELFORMAT *pixelFormat);
		[helpcontext(304002)]		HRESULT GetCount([out,retval] long *count);

	};

	[
		object,
		uuid(9F76FDD3-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DEnumDevices Interface"),
		pointer_default(unique),
		local,
		helpcontext(304200)
	]
	interface Direct3DEnumDevices : IUnknown
	{
			import "oaidl.idl";
			[helpcontext(304201)]		HRESULT GetGuid([in] long index,[out,retval] BSTR *guid);
			[helpcontext(304202)]		HRESULT GetDescription([in] long index,[out,retval] BSTR *guid);
			[helpcontext(304203)]		HRESULT GetName([in] long index,[out,retval] BSTR *guid);
			[helpcontext(304204)]		HRESULT GetDesc([in] long index, [in,out] D3DDEVICEDESC7 *hwDesc);			
			[helpcontext(304205)]		HRESULT GetCount([out,retval]long *count);		
	};



///////////////////////////////////////////////////////////////////////////
// 
// Direct Draw Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FDC9-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawPalette Interface"),
		pointer_default(unique),
		local,
		helpcontext(304400)
	]
	interface DirectDrawPalette : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpddp);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpddp);


		[helpcontext(304401)]		HRESULT GetCaps( [out, retval] DDPCapsFlags *caps);
		[helpcontext(304402)]		HRESULT GetEntries([in] long start, [in] long count, [in,out] SAFEARRAY(APAL) *val);
		[helpcontext(304403)]		HRESULT SetEntries([in] long start, [in] long count, [in]  SAFEARRAY(APAL) *val);

		[hidden]		HRESULT SetEntriesHalftone([in] long start, [in] long count);
		[hidden]		HRESULT SetEntriesSystemPalette([in] long start, [in] long count);
	};

 	[
		object,
		uuid(9F76FDCA-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawClipper Interface"),
		pointer_default(unique),
		local,
		helpcontext(304600)
	]
	interface DirectDrawClipper : IUnknown	
	{
		import "oaidl.idl";	
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpddc);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpddc);

		[helpcontext(304601)]		HRESULT GetClipListSize( [out, retval]  int *count);
		[helpcontext(304602)]		HRESULT GetClipList([in,out] SAFEARRAY(RECT) *rects );
		[helpcontext(304603)]		HRESULT SetClipList( [in] long count, [in] SAFEARRAY(RECT) *rects );

		[helpcontext(304604)]		HRESULT GetHWnd([out, retval] HWnd *hdl);
		[helpcontext(304605)]		HRESULT SetHWnd( [in] HWnd hdl);
	
		
		[helpcontext(304606)]		HRESULT IsClipListChanged( [out, retval] int *status);
		
		
	};

	


	[
		object,
		uuid(9F76FDE0-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawColorControl Interface"),
		pointer_default(unique),
		local,
		helpcontext(304800)
	]
	interface DirectDrawColorControl : IUnknown
	{
			import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);
		[helpcontext(304801)]		HRESULT GetColorControls([in,out] DDCOLORCONTROL *colorControl);
		[helpcontext(304802)]		HRESULT SetColorControls([in] DDCOLORCONTROL *colorControl);
	};


	[
		object,
		uuid(9F76FDE1-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawEnum Interface"),
		pointer_default(unique),
		local,
		helpcontext(305000)
	]
	interface DirectDrawEnum : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(305001)]		HRESULT GetGuid([in] long index,[out,retval] BSTR *guid);
		[helpcontext(305002)]		HRESULT GetDescription([in] long index,[out,retval] BSTR *ret);
		[helpcontext(305003)]		HRESULT GetName([in] long index,[out,retval] BSTR *ret);
		[helpcontext(305004)]		HRESULT GetMonitorHandle([in] long index,[out,retval] long *ret);
        	[helpcontext(305005)]		HRESULT GetCount([out,retval]long *count);		
	};

	


	[
		object,
		uuid(9F76FFFF-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawEnumModes Interface"),
		pointer_default(unique),
		local,
		helpcontext(305200)
	]
	interface DirectDrawEnumModes : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(305201)]		HRESULT GetItem( [in]long index, [in,out] DDSURFACEDESC2 *info);
        	[helpcontext(305202)]		HRESULT GetCount([out,retval]long *count);		
	};



	[
		object,
		uuid(9F76FDE6-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawEnumSurfaces	 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305400)

	]
	interface DirectDrawEnumSurfaces : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(305401)]		HRESULT GetItem( [in]long index, [out,retval] DirectDrawSurface7 **retVal);
        	[helpcontext(305402)]		HRESULT GetCount([out,retval]long *count);		
	};



	[
		object,
		uuid(9F76FDE7-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirectDraw7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305600)
	]
	interface DirectDraw7 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
	   	[helpcontext(305601)]		HRESULT CreateClipper([in] long flags, [out, retval] DirectDrawClipper **val);
		[helpcontext(305602)]		HRESULT CreatePalette([in] DDPCapsFlags flags, [in] SAFEARRAY(APAL) *pe, [out, retval] DirectDrawPalette **val);
		[helpcontext(305603)]		HRESULT CreateSurface([in] DDSURFACEDESC2 *dd, [out, retval] DirectDrawSurface7 **retv);
		[helpcontext(305604)]		HRESULT CreateSurfaceFromFile([in] BSTR file, [in,out] DDSURFACEDESC2 *dd, [out, retval] DirectDrawSurface7 **retv);
		[helpcontext(305605)]		HRESULT CreateSurfaceFromResource([in] BSTR file, [in] BSTR resName, [in,out] DDSURFACEDESC2 *ddsd, [out, retval] DirectDrawSurface7 **retv);					
		[helpcontext(305606)]		HRESULT DuplicateSurface([in] DirectDrawSurface7 *ddIn,[out, retval] DirectDrawSurface7 **ddOut);		
		[helpcontext(305607)]		HRESULT FlipToGDISurface();		
		[helpcontext(305608)]		HRESULT GetAvailableTotalMem([in] DDSCAPS2 *ddsCaps, [out, retval] long *m);
		[helpcontext(305609)]		HRESULT GetCaps([in,out] DDCAPS *hwCaps,  [in,out] DDCAPS *helCaps);
		[helpcontext(305610)]		HRESULT GetDirect3D([out, retval] Direct3d7 **retv);  		
		[helpcontext(305611)]		HRESULT GetDisplayMode( [in,out] DDSURFACEDESC2 *surface);
		[helpcontext(305612)]		HRESULT GetDisplayModesEnum([in] DDEDMFlags flags,[in] DDSURFACEDESC2 *ddsd,[out,retval] DirectDrawEnumModes **retval);
		[helpcontext(305613)]		HRESULT GetFourCCCodes( [in,out] SAFEARRAY(long) *ccCodes);
		[helpcontext(305614)]		HRESULT GetFreeMem( [in] DDSCAPS2 *ddsCaps, [out, retval] long *m);
		[helpcontext(305615)]		HRESULT GetGDISurface( [out, retval] DirectDrawSurface7 **s);
		[helpcontext(305616)]		HRESULT GetMonitorFrequency([out, retval] long *freq);
		[helpcontext(305617)]		HRESULT GetNumFourCCCodes([out, retval] long *nCodes);
		[helpcontext(305618)]		HRESULT GetScanLine([in,out] long *lines, [out, retval] long *status);		
		[helpcontext(305619)]		HRESULT GetSurfaceFromDC([in] long hdc,[out,retval] DirectDrawSurface7 **retv);
		[helpcontext(305620)]		HRESULT GetSurfacesEnum([in] DDEnumSurfacesFlags flags, [in] DDSURFACEDESC2 *desc, [out,retval] DirectDrawEnumSurfaces **ret);				
		[helpcontext(305621)]		HRESULT GetVerticalBlankStatus([out, retval] long *status);
		[helpcontext(305622)]		HRESULT LoadPaletteFromBitmap([in] BSTR bName, [out, retval] DirectDrawPalette **retv);
		[helpcontext(305623)]		HRESULT RestoreAllSurfaces();		
		[helpcontext(305624)]		HRESULT RestoreDisplayMode();
		[helpcontext(305625)]		HRESULT SetCooperativeLevel([in] HWnd hdl, [in] DDSCLFlags flags);
		[helpcontext(305626)]		HRESULT SetDisplayMode([in] long w, [in] long h, [in] long bpp, [in] long ref,[in] DDSDMFlags mode);
		[helpcontext(305627)]		HRESULT TestCooperativeLevel([out,retval] long *status);
		[helpcontext(305628)]		HRESULT WaitForVerticalBlank([in] DDWaitVBFlags flags, [in] long handle, [out, retval] long *status);

		[helpcontext(305629)]		HRESULT GetDeviceIdentifier([in] DDDeviceIDFlags flags,[out,retval] DirectDrawIdentifier **ret);		
	};

	[
		object,
		uuid(9F76FDE8-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawSurface7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305800)
	]
	interface DirectDrawSurface7 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);				
				
		[helpcontext(305801)]		HRESULT AddAttachedSurface( [in] DirectDrawSurface7 *ddS);				
	    [helpcontext(305802)]		HRESULT Blt( [in] RECT *destRect, [in] DirectDrawSurface7 *ddS, [in] RECT *srcRect, [in] DDBltFlags flags, [out, retval] long *status);
		[helpcontext(305803)]		HRESULT BltColorFill( [in] RECT *destRect, [in] long fillvalue, [out, retval] long *status );
		[helpcontext(305804)]		HRESULT BltFast( [in] long dx, [in] long dy, [in] DirectDrawSurface7 *dds, [in] RECT *srcRect, [in] DDBltFastFlags trans, [out, retval] long *status);		
		[helpcontext(305805)]		HRESULT BltFx( [in] RECT *destRect, [in] DirectDrawSurface7 *ddS, [in] RECT *srcRect, [in] DDBltFlags flags, [in] DDBLTFX *bltfx, [out, retval] long *status );
		[helpcontext(305806)]		HRESULT BltToDC([in] long hdc, [in] RECT *srcRect, [in] RECT *destRect);	
		[helpcontext(305807)]		HRESULT ChangeUniquenessValue();		
		[helpcontext(305808)]		HRESULT DeleteAttachedSurface( [in] DirectDrawSurface7 *dds) ;
		[helpcontext(305809)]		HRESULT DrawBox([in] long x1, [in] long y1, [in] long x2, [in] long y2);
		[helpcontext(305810)]		HRESULT DrawCircle([in] long x1, [in] long y1, [in] long r);
		[helpcontext(305811)]		HRESULT DrawEllipse([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305812)]		HRESULT DrawLine([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305813)]		HRESULT DrawRoundedBox([in] long x1, [in] long y1, [in] long x2, [in] long y2,[in] long rw, [in] long rh);		
		[helpcontext(305814)]		HRESULT DrawText([in] long x, [in] long y,  [in] BSTR text, [in] VARIANT_BOOL b);
		[helpcontext(305815)]		HRESULT Flip( [in] DirectDrawSurface7 *dds, [in] DDFlipFlags flags);		
		[helpcontext(305816)]		HRESULT GetAttachedSurface( [in] DDSCaps2 *caps, [out, retval] DirectDrawSurface7 **dds);
		[helpcontext(305817)]		HRESULT GetAttachedSurfaceEnum([out,retval] DirectDrawEnumSurfaces **retval);
		[helpcontext(305818)]		HRESULT GetBltStatus([in] DDGFSFlags flags, [out, retval] long *status);
		[helpcontext(305819)]		HRESULT GetCaps( [in,out] DDSCAPS2  *caps);
		[helpcontext(305820)]		HRESULT GetClipper( [out, retval] DirectDrawClipper **val);
		[helpcontext(305821)]		HRESULT GetColorKey( [in] long flags, [in,out] DDCOLORKEY *val);
		[helpcontext(305822)]		HRESULT GetDC( [out, retval] long *hdc);
		[helpcontext(305823)]		HRESULT GetDirectDraw( [out, retval] DirectDraw7 **val);			
		[helpcontext(305824)]		HRESULT GetDirectDrawColorControl([out,retval] DirectDrawColorControl **retv);
		[helpcontext(305825)]		HRESULT GetDirectDrawGammaControl([out,retval] DirectDrawGammaControl **retv);
		[helpcontext(305826)]		HRESULT GetDrawStyle([out,retval] long *drawStyle);		
		[helpcontext(305827)]		HRESULT GetDrawWidth([out,retval] long *drawWidth);		
		[helpcontext(305828)]		HRESULT GetFillColor([out,retval] long *color);		
		[helpcontext(305829)]		HRESULT GetFillStyle([out,retval] long *fillStyle);		
		[helpcontext(305830)]		HRESULT GetFlipStatus( [in] DDGfsFlags flags, [out, retval] long *status);		
		[helpcontext(305831)]		HRESULT GetFontTransparency([out,retval] VARIANT_BOOL *b);		
		[helpcontext(305832)]		HRESULT GetForeColor([out,retval] long *color);						
		[helpcontext(305833)]		HRESULT GetLockedPixel([in] int x, [in] int y, [out,retval] long *col);
		//[helpcontext(305834)]		HRESULT GetLockedSurfaceBits([in,out] ABYTE *memory);		
		[helpcontext(305835)]		HRESULT GetPalette( [out, retval] DirectDrawPalette **val);
		[helpcontext(305836)]		HRESULT GetPixelFormat( [in,out] DDPIXELFORMAT *pf);		
		[helpcontext(305837)]		HRESULT GetSurfaceDesc([in,out] DDSURFACEDESC2 *surface);
		[helpcontext(305838)]		HRESULT GetUniquenessValue([out,retval] long *retVal);
		[helpcontext(305839)]		HRESULT IsLost([out, retval] long *status);
        [helpcontext(305840)]		HRESULT Lock( [in] RECT *r, [in] DDSURFACEDESC2 *desc, [in] ddLockFlags flags, [in] Handle hnd);
		[helpcontext(305841)]		HRESULT ReleaseDC([in] long hdc);		
		[helpcontext(305842)]		HRESULT Restore();
		[helpcontext(305843)]		HRESULT SetClipper( [in] DirectDrawClipper *val) ;
		[helpcontext(305844)]		HRESULT SetColorKey( [in] DDCKeyFlags flags, [in] DDCOLORKEY *val);
		[helpcontext(305845)]		HRESULT SetDrawStyle([in] long drawStyle);
		[helpcontext(305846)]		HRESULT SetDrawWidth([in] long drawWidth);
		[helpcontext(305847)]		HRESULT SetFillColor([in] long color);
		[helpcontext(305848)]		HRESULT SetFillStyle([in] long fillStyle);
		[helpcontext(305849)]		HRESULT SetFont([in] IFont *font);		
		[helpcontext(305850)]		HRESULT SetFontTransparency([in] VARIANT_BOOL b);
		[helpcontext(305851)]		HRESULT SetForeColor([in] long color);
		[helpcontext(305852)]		HRESULT SetLockedPixel([in] int x, [in] int y, [in] long col);		
		//[helpcontext(305853)]		HRESULT SetLockedSurfaceBits([in,out] ABYTE *memory);
		[helpcontext(305854)]		HRESULT SetPalette([in] DirectDrawPalette *ddp);		
        [helpcontext(305855)]		HRESULT Unlock( [in] RECT *r);		
		[helpcontext(305856)]		HRESULT SetPriority([in] long Priority);
		[helpcontext(305857)]		HRESULT GetPriority([out,retval] long *Priority);
		[helpcontext(305858)]		HRESULT GetLOD([out,retval] long *lod);
		[helpcontext(305859)]		HRESULT SetLOD([in] long lod);
		[helpcontext(305860)]		HRESULT GetLockedArray([in] SAFEARRAY(byte) *array);		
		[helpcontext(305868)]		HRESULT SetFontBackColor([in] long color);
		[helpcontext(305869)]		HRESULT GetFontBackColor([out,retval] long *color);
		[helpcontext(305870)]		HRESULT UpdateOverlay( [in] RECT *rect, [in] DirectDrawSurface7 *dds, [in] RECT *rectD, [in] DDOverFlags flags);		
		[helpcontext(305871)]		HRESULT UpdateOverlayZOrder( [in] DDOverZFlags flags, [in] DirectDrawSurface7 *dds);
		[helpcontext(305872)]		HRESULT GetOverlayPosition(  [in,out] long *x, [in,out] long *y);
		[helpcontext(305873)]		HRESULT SetOverlayPosition( [in] long x, [in] long y);
		[helpcontext(305874)]		HRESULT GetOverlayZOrdersEnum([in] DDEnumOverlayZFlags flags,[out,retval] DirectDrawEnumSurfaces **retval);				
		[helpcontext(305875)]		HRESULT UpdateOverlayFx([in] RECT *rect, [in] DirectDrawSurface7 *dds, [in] RECT *rectD, [in] DDOverFlags flags, [in,out] DDOVERLAYFX *ddoverfx);	
		
		/*
		//CONSIDER USING A STRING
		[helpcontext(305868)]		HRESULT FreePrivateData([in] BSTR guid);
		[helpcontext(305869)]		HRESULT GetPrivateData([in] BSTR guid,[in,out] SAFEARRAY(long)* data);
		[helpcontext(305870)]		HRESULT GetPrivateDataSize([in] BSTR guid,[out,retval] long *size);
		[helpcontext(305871)]		HRESULT SetPrivateData([in] BSTR guid, [in] SAFEARRAY(long) *data);
		*/

	};



	[
		object,
		uuid(9F76FDE9-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectDrawGammaControl Interface"),
		pointer_default(unique),
		local	,
		helpcontext(306000)
	]
	interface DirectDrawGammaControl : IUnknown
	{
			import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);
		[helpcontext(306001)]		HRESULT GetGammaRamp([in] DDSGRFlags flags,[in,out]	DDGAMMARAMP *gammaRamp);
		[helpcontext(306002)]		HRESULT SetGammaRamp([in] DDSGRFlags flags,[in]		DDGAMMARAMP *gammaRamp);		
	};





///////////////////////////////////////////////////////////////////////////
// 
//              Direct 3D Retain Mode Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE0E-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMObject Interface"),
		pointer_default(unique),
		local,
		helpcontext(306200)
	]
	interface Direct3DRMObject : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE0F-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMVisual Interface"),
		pointer_default(unique),
		local,
		helpcontext(306400)
	]
	interface Direct3DRMVisual : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		/*** D3DRMObjects ***/
		//


		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR


	};



	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE32-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMFace2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(306600)
	]
	interface Direct3DRMFace2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR


		//
		// IDirect3DRMFace methods - docdoc: based on D3DRMObject
		//
		[helpcontext(306609)]		HRESULT AddVertex([in] float x, [in] float y, [in] float z);
		[helpcontext(306610)]		HRESULT AddVertexAndNormalIndexed([in] long vertexIndex, [in] long normalIndex);
		[helpcontext(306611)]		HRESULT GetColor([out, retval] D3Dcolor *retv);
		[helpcontext(306612)]		HRESULT GetMaterial([out, retval] Direct3DRMMaterial2 **retv);
		[helpcontext(306613)]		HRESULT GetNormal([in,out] D3DVECTOR *val);
		[helpcontext(306614)]		HRESULT GetTexture([out, retval] Direct3DRMTexture3 **ref);
		[helpcontext(306615)]		HRESULT GetTextureCoordinateIndex([in] long which, [out, retval] int *retv);
		[helpcontext(306616)]		HRESULT GetTextureCoordinates([in] long vertex, [in,out] float *u,[in,out] float *v);
		[helpcontext(306617)]		HRESULT GetVertex([in] long idx, [in,out] D3DVECTOR *vert,[in,out] D3DVECTOR *norm);		
		[helpcontext(306618)]		HRESULT GetVertexCount([out, retval] int *retv);
		[helpcontext(306619)]		HRESULT GetVertexIndex([in] long which, [out, retval] int *retv);
		[helpcontext(306620)]		HRESULT GetVertices([in] long vertexCount, [in,out] SAFEARRAY(D3DVECTOR) *coord,[in,out] SAFEARRAY(D3DVECTOR) *normals);				
		[hidden]		HRESULT GetVerticesJava([in] long vertex_cnt, [in,out] float *coord,[in,out] float *normals);		
		[helpcontext(306621)]		HRESULT SetColor([in] D3Dcolor c);
		[helpcontext(306622)]		HRESULT SetColorRGB([in] float r, [in] float g, [in] float b);		
		[helpcontext(306623)]		HRESULT SetMaterial([in] Direct3DRMMaterial2 *ref);
		[helpcontext(306624)]		HRESULT SetTexture([in] Direct3DRMTexture3 *ref);
		[helpcontext(306625)]		HRESULT SetTextureCoordinates([in] long vertex, [in] float u,[in] float v);
		[helpcontext(306626)]		HRESULT SetTextureTopology([in] DBOOLFlags wrap_u, [in] DBOOLFlags wrap_v); 		
		[helpcontext(306627)]		HRESULT GetTextureTopology([in,out] DBOOLFlags *wrap_u, [in,out] DBOOLFlags *wrap_v); 		
	};


	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE03-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMLight Interface"),
		pointer_default(unique),
		local,
		helpcontext(306800)
	]
	interface Direct3DRMLight : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR


		//
		// IDirect3DRMLight methods - docdoc: based on iD3DRMObject!
		//
		[helpcontext(306809)]		HRESULT SetType([in] D3DRMLightType t);
		[helpcontext(306810)]		HRESULT SetColor([in] D3Dcolor c);
		[helpcontext(306811)]		HRESULT SetColorRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(306812)]		HRESULT SetRange([in] float rng);
		[helpcontext(306813)]		HRESULT SetUmbra([in] float u);
		[helpcontext(306814)]		HRESULT SetPenumbra([in] float p);
		[helpcontext(306815)]		HRESULT SetConstantAttenuation([in] float atn);
		[helpcontext(306816)]		HRESULT SetLinearAttenuation([in] float atn);
		[helpcontext(306817)]		HRESULT SetQuadraticAttenuation([in] float atn);
		[helpcontext(306818)]		HRESULT GetRange([out, retval] float *retv);
		[helpcontext(306819)]		HRESULT GetUmbra([out, retval] float *retv);
		[helpcontext(306820)]		HRESULT GetPenumbra([out, retval] float *retv);
		[helpcontext(306821)]		HRESULT GetConstantAttenuation([out, retval] float *retv);
		[helpcontext(306822)]		HRESULT GetLinearAttenuation([out, retval] float *retv);
		[helpcontext(306823)]		HRESULT GetQuadraticAttenuation([out, retval] float *retv);
		[helpcontext(306824)]		HRESULT GetColor( [out, retval] D3Dcolor *value);
		[helpcontext(306825)]		HRESULT GetType([out, retval] D3DRMLightType *retv);
		[helpcontext(306826)]		HRESULT SetEnableFrame([in] Direct3DRMFrame3 *f);
		[helpcontext(306827)]		HRESULT GetEnableFrame([out, retval] Direct3DRMFrame3 **retv);
	};



	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE06-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMMesh Interface"),
		pointer_default(unique),
		local,
		helpcontext(307000)
	]
	interface Direct3DRMMesh : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		/*
		 * IDirect3DRMMesh methods
		 */


	
		//#pragma message ("consider if you want to pass down count to API that fill SAFEARRAYS")
	
		[helpcontext(307009)]		HRESULT SetGroupColor([in] D3DRMGroupIndex id, [in] d3dcolor val);
		[helpcontext(307010)]		HRESULT SetGroupColorRGB([in] D3DRMGroupIndex id, [in] float r,[in] float g, [in] float b);
	    [helpcontext(307011)]		HRESULT SetGroupMapping([in] D3DRMGroupIndex id, [in] d3drmMappingFlags value);
		[helpcontext(307012)]		HRESULT SetGroupQuality([in] D3DRMGroupIndex id, [in] d3drmRenderQuality value);
		[helpcontext(307013)]		HRESULT SetGroupMaterial([in] D3DRMGroupIndex id, [in] Direct3dRMMaterial2 *val);
		[helpcontext(307014)]		HRESULT SetGroupTexture([in] D3DRMGroupIndex id, [in] Direct3dRMTexture3 *val);
		[helpcontext(307015)]		HRESULT GetGroupCount([out, retval] long *retv);
		[helpcontext(307016)]		HRESULT GetGroupColor(   [in] D3DRMGroupIndex id, [out, retval] d3dcolor *retv);
      	[helpcontext(307017)]		HRESULT GetGroupMapping( [in] D3DRMGroupIndex id, [out, retval] d3drmMappingFlags *retv);
		[helpcontext(307018)]		HRESULT GetGroupQuality( [in] D3DRMGroupIndex id, [out, retval] d3drmRenderQuality *retv);
		[helpcontext(307019)]		HRESULT GetGroupMaterial([in] D3DRMGroupIndex id, [out, retval] Direct3dRMMaterial2 **retv);
		[helpcontext(307020)]		HRESULT GetGroupTexture( [in] D3DRMGroupIndex id, [out, retval] Direct3dRMTexture3 **retv);		

		[helpcontext(307021)]		HRESULT ScaleMesh([in] float sx, [in] float sy, [in] float sz);

		[helpcontext(307022)]		HRESULT Translate([in] float tx, [in] float ty, [in] float tz);		
		[helpcontext(307023)]		HRESULT GetBox([in] D3DRMBOX *vector);	
		[helpcontext(307024)]		HRESULT GetSizes( [in]D3DRMGroupIndex id, [out]long *cnt1,[out]long *cnt2,[out] long *cnt3,[out] long *cnt4);

		//docdoc: this function takes an array of vertices, well there is a bit of a problem 
		//        with that in java so the alternative has been to remove SetVertices()
		//		  and created two functions one SetVertice, which only set one vertice
		//		  and SetVerticesAsFloats, which takes in an array of floats as vertices 
		[helpcontext(307025)]		HRESULT SetVertex([in] D3DRMGroupIndex id, [in] long idx, [in] D3DRMVERTEX *values);
		[helpcontext(307026)]		HRESULT GetVertex([in] D3DRMGroupIndex id, [in] long idx, [in,out] D3DRMVERTEX *ret);
		[helpcontext(307027)]		HRESULT GetVertexCount([in] D3DRMGroupIndex id, [out, retval] long *cnt);


		[helpcontext(307028)]		HRESULT AddGroup([in] long vertexCount, [in] long faceCount, [in] long verticesPerFace,
							[in] SAFEARRAY(long) *fdata, [out,retval] D3DRMGroupIndex *retId);
		[helpcontext(307029)]		HRESULT GetGroupData([in] D3DRMGroupIndex id, [in,out] SAFEARRAY(long) *psa);		
		[helpcontext(307030)]		HRESULT GetGroupDataSize([in] D3DRMGroupIndex id, [out,retval] long *retVal);
		[helpcontext(307031)]		HRESULT SetVertices([in] D3DRMGroupIndex id, [in] long idx, [in] long count, [in] SAFEARRAY(D3DRMVERTEX) *vertexArray);
		[helpcontext(307032)]		HRESULT GetVertices([in] D3DRMGroupIndex id, [in] long idx,long count, [in,out] SAFEARRAY(D3DRMVERTEX) *vertexArray);
		
		[hidden]		HRESULT AddGroupJava([in] long vcnt, [in] long fcnt, [in] long vPerFace,
						[in,out] long *fdata, [out,retval] D3DRMGroupIndex *retId);
		[hidden]		HRESULT GetGroupDataJava([in] D3DRMGroupIndex id, [in] long size,[in,out] long *fData);
		[hidden]		HRESULT SetVerticesJava([in] D3DRMGroupIndex id, [in] long idx, [in] long cnt, [in,out] float *vertexArray);
		[hidden]		HRESULT GetVerticesJava([in] D3DRMGroupIndex id, [in] long idx,long cnt, [in,out] float *vertexArray);


	};


		
	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE08-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMWrap Interface"),
		pointer_default(unique),
		local,
		helpcontext(307200)
	]
	interface Direct3DRMWrap : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR


		[helpcontext(307209)]		HRESULT Apply([in] Direct3DRMObject *visual);
		[helpcontext(307210)]		HRESULT ApplyRelative([in] Direct3DRMFrame3 *f, [in] Direct3dRMObject *visual);
	};

	
	///////////////////////////////////////////////////////////////////////////
	/*
	[
		object,
		uuid(9F76FE0C-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMUserVisual Interface"),
		pointer_default(unique),
		local,
		hidden,
		helpcontext(307400)
	]
	interface Direct3DRMUserVisual : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		
	};
	*/

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE11-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMObjectArray Interface"),			// Direct51
		pointer_default(unique),
		local,
		helpcontext(307600)
	]
	interface Direct3DRMObjectArray : IUnknown
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(307601)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(307602)]		HRESULT GetElement([in] long index, [out,retval] Direct3DRMObject **retv);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE12-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMDeviceArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(307800)
	]
	interface Direct3DRMDeviceArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(307801)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(307802)]		HRESULT GetElement([in] long index, [out, retval] Direct3DRMDevice3 **lplpD3DRMDevice);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE13-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirect3DRMViewportArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308000)
	]
	interface Direct3DRMViewportArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308001)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(308002)]		HRESULT GetElement([in] long index, [out, retval] Direct3DRMViewport2 **lplpD3DRMViewport);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE14-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMFrameArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308200)
	]
	interface Direct3DRMFrameArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308201)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(308202)]		HRESULT GetElement([in] long index, [out, retval] Direct3DRMFrame3 **ppFrame);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE15-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMVisualArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308400)
	]
	interface Direct3DRMVisualArray : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308401)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(308402)]		HRESULT GetElement( [in] long index, [out, retval] Direct3DRMVisual **retv);
		
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE16-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirect3DRMLightArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308600)
	]
	interface Direct3DRMLightArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308601)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(308602)]		HRESULT GetElement( [in] long index, [out, retval] Direct3DRMLight **retv);		
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE17-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMPickArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308800)
	]
	interface Direct3DRMPickArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308801)]		HRESULT GetSize( [out, retval] long *retv);

		[helpcontext(308802)]		HRESULT GetPickVisual([in] long index, [in] D3DRMPICKDESC *pickDesc,
										[out,retval] Direct3DRMVisual **visual);

		[helpcontext(308803)]		HRESULT GetPickFrame([in] long index, [in] D3DRMPICKDESC *pickDesc,
 								  [out, retval] Direct3DRMFrameArray **frameArray);		
	};



	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE18-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMFaceArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(309000)
	]
	interface Direct3DRMFaceArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(309001)]		HRESULT GetSize( [out, retval] long *retv);
		[helpcontext(309002)]		HRESULT GetElement([in] long index, [out, retval] Direct3DRMFace2 **retv);
	};

	///////////////////////////////////////////////////////////////////////////

	[
		object,
		uuid(9F76FE19-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMPick2Array Interface"),
		pointer_default(unique),
		local,
		helpcontext(309200)
	]
	interface Direct3DRMPick2Array : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(309201)]		HRESULT GetSize( [out, retval] long *retv);

		[helpcontext(309202)]		HRESULT GetPickVisual([in] long index, [in] D3DRMPICKDESC2 *pickDesc,
										[out,retval] Direct3DRMVisual **visual);

		[helpcontext(309203)]		HRESULT GetPickFrame([in] long index, [in] D3DRMPICKDESC2 *pickDesc,
 								  [out, retval] Direct3DRMFrameArray **frameArray);
	};







	[	object,
		uuid(9F76FE33-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMFrameMoveCallback3"),
		pointer_default(unique),
		helpcontext(309400)
	]	interface Direct3DRMFrameMoveCallback3 : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(309401)]		HRESULT CallbackRMFrameMove([in] Direct3DRMFrame3 *f,
								[in] USERARG *arg, [in] float delta);
	};

	
	[	object,
		uuid(9F76FE34-8E92-11d1-8808-00C04FC2C602),	// Direct45
		helpstring("Direct3DRMDeviceUpdateCallback3 Interface"),
		pointer_default(unique),
		helpcontext(309600)

	]	
	interface Direct3DRMDeviceUpdateCallback3 : IUnknown
	{
		import "oaidl.idl";

		//TODO update callback wont work in VB with structures
		// User supplied callback
		[helpcontext(309601)]		HRESULT CallbackRMUpdate([in] Direct3DRMDevice3 *f,
				[in] USERARG *arg, [in] int n, [in] D3DRECT *Update);
	};
	

	[	object,
		uuid(9F76FE35-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMAnimationArray"),
		pointer_default(unique),
                local,
		helpcontext(309800)
	]	
	interface Direct3DRMAnimationArray : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(309801)]		HRESULT GetSize([out,retval] long *ret);
		[helpcontext(309802)]		HRESULT GetElement([in] long index,[out,retval] Direct3DRMAnimation2 **anim);		
	};


	[
		object,
		uuid(9F76FE36-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMShadow2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310000)

	]
	interface Direct3DRMShadow2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		[helpcontext(310009)]		HRESULT SetOptions([in] D3DRMShadowFlags flags);



	};

	[
		object,
		uuid(9F76FE20-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMViewport2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310200)
	]
	interface Direct3DRMViewport2 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		//
		/*** D3DRMObjects ***/
		//
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR
		//
		// _dxj_Direct3DRMViewport
		//		
		[helpcontext(310209)]		HRESULT Clear([in] D3DRMViewportClearFlags flags);
		[helpcontext(310210)]		HRESULT Render([in] Direct3DRMFrame3 *rootFrame);
		[helpcontext(310211)]		HRESULT GetCamera([out, retval] Direct3DRMFrame3 **val);
		[helpcontext(310212)]		HRESULT GetDevice([out, retval] Direct3DRMDevice3 **val);

		[helpcontext(310213)]		HRESULT SetFront( [in] float v);
		[helpcontext(310214)]		HRESULT SetBack( [in] float v);
		[helpcontext(310215)]		HRESULT SetField( [in] float v);
		[helpcontext(310216)]		HRESULT SetUniformScaling( [in] DBOOLFlags flag);  //BOOL
		[helpcontext(310217)]		HRESULT SetCamera( [in] Direct3DRMFrame3 *f);
		[helpcontext(310218)]		HRESULT SetProjection([in] D3DRMProjectionType val);
		[helpcontext(310219)]		HRESULT Transform([out] D3DRMVECTOR4D *d, [in] D3DVECTOR *s);
		[helpcontext(310220)]		HRESULT InverseTransform([out] D3DVECTOR *d, [in] D3DRMVECTOR4D *s);

		[helpcontext(310221)]		HRESULT Configure([in] long x, [in] long y, [in] long width, [in] long height);
		[helpcontext(310222)]		HRESULT ForceUpdate([in] long x1, [in] long y1, [in] long x2, [in] long y2);
		[helpcontext(310223)]		HRESULT SetPlane([in] float left, [in] float right,	[in] float bottom, [in] float top);
		[helpcontext(310224)]		HRESULT GetPlane([in,out] float *l, [in,out] float *r, [in,out] float *b, [in,out] float *t);
		[helpcontext(310225)]		HRESULT Pick([in] long x, [in] long y, [out, retval] Direct3DRMPickArray **retv);
		[helpcontext(310226)]		HRESULT GetUniformScaling([out, retval] DBOOLFlags *retv); //BOOL
		[helpcontext(310227)]		HRESULT GetX([out, retval] long *retv);
		[helpcontext(310228)]		HRESULT GetY([out, retval] long *retv);
		[helpcontext(310229)]		HRESULT GetHeight([out, retval] long *w);
		[helpcontext(310230)]		HRESULT GetWidth([out, retval] long *w);
		[helpcontext(310231)]		HRESULT GetField([out, retval] float *retv);
		[helpcontext(310232)]		HRESULT GetBack([out, retval] float *retv);
		[helpcontext(310233)]		HRESULT GetFront([out, retval] float *retv);
		[helpcontext(310234)]		HRESULT GetProjection([out, retval]  D3DRMProjectionType *retv);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE21-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMMaterial2 Interface"),
		pointer_default(unique),
		helpcontext(310400)

	]
	interface Direct3DRMMaterial2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR
		/*
		* IDirect3DRMMaterial methods
		*/
		[helpcontext(310409)]		HRESULT SetPower([in] float power);
		[helpcontext(310410)]		HRESULT SetSpecular([in] float r, [in] float g, [in] float b);
		[helpcontext(310411)]		HRESULT SetEmissive([in] float r, [in] float g, [in] float b);
		[helpcontext(310412)]		HRESULT SetAmbient([in] float r, [in] float g, [in] float b);
		[helpcontext(310413)]		HRESULT GetPower([out, retval] float *power);
		[helpcontext(310414)]		HRESULT GetSpecular([out] float *r, [out] float *g, [out] float *b);
		[helpcontext(310415)]		HRESULT GetEmissive([out] float *r, [out] float *g, [out] float *b);
		[helpcontext(310416)]		HRESULT GetAmbient([out] float *r, [out] float *g, [out] float *b);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE22-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMAnimation2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310600)

	]
	interface Direct3DRMAnimation2 : IUnknown 
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
	 	[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR
		/*
		* IDirect3DRMAnimation2 methods
		*/
		[helpcontext(310609)]		HRESULT SetOptions([in] D3DRMAnimationOptions flags);
		[helpcontext(310610)]		HRESULT AddRotateKey([in] float time, [in] D3DRMQUATERNION *q);
		[helpcontext(310611)]		HRESULT AddPositionKey([in] float time, [in] float x, [in] float y,	[in] float z);
		[helpcontext(310612)]		HRESULT AddScaleKey([in] float time, [in] float x, [in] float y, [in] float z);
		[helpcontext(310613)]		HRESULT DeleteKey([in] float time);
		[helpcontext(310614)]		HRESULT SetFrame([in] Direct3DRMFrame3 *frame);
		[helpcontext(310615)]		HRESULT GetFrame([out,retval] Direct3DRMFrame3 **frame);		
		[helpcontext(310616)]		HRESULT SetTime([in] float time);
		[helpcontext(310617)]		HRESULT GetOptions([out, retval] D3DRMAnimationOptions *options);
		[helpcontext(310618)]		HRESULT AddKey([in] D3DRMANIMATIONKEY *key);
		[helpcontext(310619)]		HRESULT DeleteKeyById([in] long id);
		[helpcontext(310620)]		HRESULT GetKeys([in] float timeMin,[in] float timeMax ,[in,out] SAFEARRAY(D3DRMANIMATIONKEY) *keyArray);
		[helpcontext(310621)]		HRESULT GetKeysCount([in] float timeMin,[in] float timeMax, [out,retval] long *count);
		[helpcontext(310622)]		HRESULT ModifyKey([in] D3DRMANIMATIONKEY *key);
	};

	[
		object,
		uuid(9F76FE23-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMAnimationSet2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310800)

	]
	interface Direct3DRMAnimationSet2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		//
		// IDirect3DRMAnimationSet methods
		//
		[helpcontext(310809)]		HRESULT AddAnimation([in] Direct3DRMAnimation2 *aid);
		[helpcontext(310810)]		HRESULT DeleteAnimation([in] Direct3DRMAnimation2 *aid);

		[helpcontext(310811)]		HRESULT GetAnimations([out,retval] Direct3DRMAnimationArray **ret);

		[helpcontext(310812)]		HRESULT LoadFromFile( [in] BSTR filename, [in] VARIANT id,
						[in] D3DRMLoadFlags flags, [in] Direct3dRMLoadTextureCallback3 * loadTextureImplementation,
						[in] USERARG *userArgument, [in] Direct3DRMFrame3 *parentFrame);

		
		[helpcontext(310813)]		HRESULT SetTime([in] float time);
	};

	[
		object,
		uuid(9F76FE24-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRM3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311000)

	]
	interface Direct3DRM3 : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(311001)]		HRESULT CreateDeviceFromClipper([in]DirectDrawClipper *lpDDClipper,[in]BSTR guid,[in]int width,[in]int height,[out,retval]Direct3DRMDevice3 **retv);
		[helpcontext(311002)]		HRESULT CreateFrame([in]Direct3DRMFrame3 *parent,[out,retval]Direct3dRMFrame3 **retv);
		[helpcontext(311003)]		HRESULT CreateLightRGB ([in]D3DRMLightType lt,[in]float vred,[in]float vgreen,[in]float vblue,[out,retval]Direct3dRMLight **retv);
		[helpcontext(311004)]		HRESULT CreateLight([in]D3DRMLightType lt,[in]long color,[out,retval]Direct3dRMLight **retv);    
		[helpcontext(311005)]		HRESULT CreateMeshBuilder([out,retval]Direct3DRMMeshBuilder3 **retv);
		[helpcontext(311006)]		HRESULT CreateMaterial([in]float d, [out,retval]Direct3DRMMaterial2 **val);
		[helpcontext(311007)]		HRESULT LoadTexture([in]BSTR name, [out,retval]Direct3DRMTexture3 **retval);
		[helpcontext(311008)]		HRESULT CreateViewport([in]Direct3DRMDevice3 *dev,[in] Direct3dRMFrame3 *fr,[in]long x,[in]long y,[in]long w,[in]long h,[out,retval]Direct3dRMViewport2 **retval);
		[helpcontext(311009)]		HRESULT SetDefaultTextureColors( [in]long numTextureColors);
		[helpcontext(311010)]		HRESULT SetDefaultTextureShades( [in]long numTextureShades);		
		[helpcontext(311011)]		HRESULT CreateAnimationSet([out,retval]Direct3DRMAnimationSet2 **retval) ;
		[helpcontext(311012)]		HRESULT CreateMesh([out,retval]Direct3DRMMesh **retv);
		[helpcontext(311013)]		HRESULT CreateFace([out,retval]Direct3DRMFace2 **retv);
		[helpcontext(311014)]		HRESULT CreateAnimation([out,retval]Direct3DRMAnimation2 **retv);
		[helpcontext(311015)]		HRESULT Tick([in]float tic);				
		[helpcontext(311016)]		HRESULT CreateDeviceFromSurface( [in]BSTR g, [in]DirectDraw4 *dd, [in]DirectDrawSurface4 *dds,[in] D3DRMCreateDeviceFlags flags,[out,retval]  Direct3dRMDevice3 **retval);
		[helpcontext(311017)]		HRESULT CreateTextureFromSurface([in] DirectDrawSurface4 *dds,[out,retval] Direct3DRMTexture3 **retv);

		[helpcontext(311018)]		HRESULT CreateWrap( [in]D3DRMWrapType t, [in]Direct3dRMFrame3 *f,
			[in] float ox,[in] float oy, 
			[in]float oz, [in]float dx, [in] float dy,  [in]float dz,
			[in]float ux, [in]float uy, [in] float uz, [in]float ou,  
			[in]float ov, [in]float su,  [in] float sv,[out,retval]Direct3DRMWrap **retv);

		[helpcontext(311019)]		HRESULT GetSearchPath([out,retval]BSTR *name);
		[helpcontext(311020)]		HRESULT GetDevices([out,retval] Direct3DRMDeviceArray **retval);

		[helpcontext(311021)]		HRESULT GetNamedObject([in]BSTR name,[out,retval]Direct3DRMObject **retval);
		[helpcontext(311022)]		HRESULT SetSearchPath([in] BSTR name);
		[helpcontext(311023)]		HRESULT AddSearchPath([in] BSTR name);
			
		[helpcontext(311024)]		HRESULT EnumerateObjects([in]Direct3DRMEnumerateObjectsCallback *enumerateObjectsImplementation,[in] USERARG *userArgument); 

		[helpcontext(311025)]		HRESULT LoadFromFile([in]BSTR filename, [in]VARIANT id, 
                        [in] SAFEARRAY(BSTR) *guidArray, [in]long count,[in] D3DRMLoadFlags options,[in] Direct3dRMLoadCallback *loadCallbackImplementation, 
						[in]USERARG *loadArgument, [in]Direct3DRMLoadTextureCallback3 *loadTextureImplementation, [in]USERARG *loadTextureArgument,[in] Direct3dRMFrame3 *parentFrame);

		[helpcontext(311026)]		HRESULT CreateShadow([in] Direct3DRMVisual *visual, 
				[in]			Direct3DRMLight *light,
				[in]			float px, [in]float py,[in]float pz, 
				[in]			float nx, [in]float ny,[in]float nz,
				[out,retval]	Direct3DRMShadow2 **retv);

		[helpcontext(311027)]		HRESULT CreateProgressiveMesh([out,retval]Direct3DRMProgressiveMesh **retv);
		[helpcontext(311028)]		HRESULT CreateClippedVisual([in] Direct3DRMVisual *vis,[out,retval] Direct3dRMClippedVisual **ret);

		[helpcontext(311029)]		HRESULT GetOptions([out,retval] D3DRMHandedness *options);
		[helpcontext(311030)]		HRESULT SetOptions([in] D3DRMHandedness options);
        
        [helpcontext(311031)]		HRESULT CreateInterpolatorMesh([out,retval] Direct3DRMMeshInterpolator **ret);
        [helpcontext(311032)]		HRESULT CreateInterpolatorTexture([out,retval] Direct3DRMTextureInterpolator **ret);
        [helpcontext(311033)]		HRESULT CreateInterpolatorMaterial([out,retval] Direct3DRMMaterialInterpolator **ret);
        [helpcontext(311034)]		HRESULT CreateInterpolatorFrame([out,retval] Direct3DRMFrameInterpolator **ret)       ;
        [helpcontext(311035)]		HRESULT CreateInterpolatorViewport([out,retval] Direct3DRMViewportInterpolator **ret) ;
        [helpcontext(311036)]		HRESULT CreateInterpolatorLight([out,retval] Direct3DRMLightInterpolator **ret)       ;

	};
	[
		object,
		uuid(9F76FE25-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMFrame3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311200)
 	]
	interface Direct3DRMFrame3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		//
		// _dxj_Direct3DRMFrame
		//
		[helpcontext(311209)]		HRESULT AddVisual( [in] Direct3DRMVisual *v );		
		[helpcontext(311210)]		HRESULT DeleteVisual( [in] Direct3DRMVisual *v );
		
		[helpcontext(311211)]		HRESULT AddLight( [in] Direct3DRMLight *val);
		[helpcontext(311212)]		HRESULT DeleteLight([in] Direct3DRMLight *l);



		[helpcontext(311213)]		HRESULT AddChild([in] Direct3DRMFrame3 *child);
		[helpcontext(311214)]		HRESULT DeleteChild([in] Direct3DRMFrame3 *c);

		//CONSIDER GETING TRANSFORM IN A D3DMATRIX STRUCT INSTEAD
		[helpcontext(311215)]		HRESULT GetTransform([in] Direct3DRMFrame3 *referenceFrame,[in,out] SAFEARRAY(float) *val);
		[helpcontext(311216)]		HRESULT AddTransform([in] D3DRMCombineType t, [in] SAFEARRAY(float) *val);

		[helpcontext(311217)]		HRESULT AddTranslation([in] D3DRMCombineType t, [in] float x, [in] float y, [in] float z);
		[helpcontext(311218)]		HRESULT AddScale([in] D3DRMCombineType combineType, [in] float sx, [in] float sy,[in] float sz);
		[helpcontext(311219)]		HRESULT AddRotation([in] D3DRMCombineType combineType, [in] float x,
							[in] float y,[in] float z, [in] float theta);

		[helpcontext(311220)]		HRESULT AddMoveCallback( [in] Direct3DRMFrameMoveCallback3 *frameMoveImplementation, [in] USERARG *userArgument, [in] D3DRMCallbackOrderFlags flags);
		[helpcontext(311221)]		HRESULT DeleteMoveCallback([in] Direct3DRMFrameMoveCallback3 *frameMoveImplementation, [in] USERARG *userArgument);

		[helpcontext(311222)]		HRESULT Transform([in,out] D3DVECTOR *d, [in] D3DVECTOR *s);
		[helpcontext(311223)]		HRESULT TransformVectors([in]Direct3DRMFrame3 *reference,[in] long num, [in,out] SAFEARRAY(D3DVECTOR) *DstVectors,[in,out] SAFEARRAY(D3DVECTOR) *SrcVectors);

		[helpcontext(311224)]		HRESULT InverseTransform([in,out] D3DVECTOR *d, [in] D3DVECTOR *s);
		[helpcontext(311225)]		HRESULT InverseTransformVectors([in]Direct3DRMFrame3 *reference,[in] long num, [in,out] SAFEARRAY(D3DVECTOR) *DstVectors,[in,out] SAFEARRAY(D3DVECTOR) *SrcVectors);




		[helpcontext(311226)]		HRESULT GetAxes([in,out]D3DVECTOR *dir,[in,out]D3DVECTOR *up);
		[helpcontext(311227)]		HRESULT GetBox([in,out]D3DRMBOX *box);
		[helpcontext(311228)]		HRESULT GetBoxEnable([out,retval] DBOOLFlags *b);

		[helpcontext(311229)]		HRESULT GetChildren([out, retval] Direct3DRMFrameArray **children);

		[helpcontext(311230)]		HRESULT GetColor([out, retval] D3Dcolor *retv);

		[helpcontext(311231)]		HRESULT GetHierarchyBox([in,out]D3DRMBOX *box);
		[helpcontext(311232)]		HRESULT GetInheritAxes([out,retval] DBOOLFlags *b);		

		[helpcontext(311233)]		HRESULT GetLights( [out, retval] Direct3DRMLightArray **lights);
		[helpcontext(311234)]		HRESULT GetMaterial(Direct3DRMMaterial2 **ret);
		[helpcontext(311235)]		HRESULT GetMaterialMode([out, retval] D3DRMMaterialMode *retv);
		[helpcontext(311236)]		HRESULT GetOrientation( [in] Direct3DRMFrame3 *ref, [in,out] D3DVECTOR *dir,[in,out] D3DVECTOR *up);
		[helpcontext(311237)]		HRESULT GetMaterialOverride([in,out] D3DRMMATERIALOVERRIDE *override);
		[helpcontext(311238)]		HRESULT GetMaterialOverrideTexture([out,retval] Direct3DRMTexture3 **ret);		

		[helpcontext(311239)]		HRESULT GetParent( [out, retval] Direct3DRMFrame3 **retv);

		[helpcontext(311240)]		HRESULT GetPosition([in] Direct3DRMFrame3 *ref, [in,out] D3DVECTOR *position);
		[helpcontext(311241)]		HRESULT GetRotation([in] Direct3DRMFrame3 *ref,[in,out] D3DVECTOR *axis,[out] float *theta);

		[helpcontext(311242)]		HRESULT GetScene([out, retval] Direct3DRMFrame3 **retv);

		[helpcontext(311243)]		HRESULT GetSceneBackground([out, retval] D3Dcolor *retv);
		[helpcontext(311244)]		HRESULT GetSceneBackgroundDepth([out, retval] DirectDrawSurface7 **retv);
		[helpcontext(311245)]		HRESULT GetSceneFogColor([out, retval] D3Dcolor *retv);
		[helpcontext(311246)]		HRESULT GetSceneFogEnable([out, retval] DBOOLFlags *benable); 
		[helpcontext(311247)]		HRESULT GetSceneFogMode([out, retval] D3DRMFogMode *retv);
		[helpcontext(311248)]		HRESULT GetSceneFogMethod([out, retval] D3DRMFogMethod *method);
		[helpcontext(311249)]		HRESULT GetSceneFogParams([in,out] float *start, [in,out] float *end, [in,out] float *density);
	
								
		[helpcontext(311250)]		HRESULT GetSortMode([out, retval] D3DRMSortMode *retv);
		[helpcontext(311251)]		HRESULT GetTexture([out,retval] Direct3DRMTexture3 **ref);

		[helpcontext(311252)]		HRESULT GetVelocity([in] Direct3DRMFrame3 *ref, [in,out] D3DVECTOR *vel,
															  	[in] DBOOLFlags includeRotationalVelocity);

		[helpcontext(311253)]		HRESULT GetVisuals([out, retval] Direct3DRMVisualArray **visuals);																
		[helpcontext(311254)]		HRESULT GetVisual([in] long index, [out, retval] Direct3DRMVisual **visualArray);
		[helpcontext(311255)]		HRESULT GetVisualCount([out, retval] long *vis);

		
		[helpcontext(311256)]		HRESULT GetTraversalOptions([out,retval] D3DRMTraversalFlags *ret);
		[helpcontext(311257)]		HRESULT GetZBufferMode([out,retval] D3DRMZBufferMode *ret);

		//CONSIDER what of loading from resources
		[helpcontext(311258)]		HRESULT LoadFromFile([in] BSTR filename, [in] VARIANT id,
							[in] D3DRMLoadFlags flags, [in] Direct3dRMLoadTextureCallback3 *loadTextureImplementation,
							[in] USERARG *userArgument);

		[helpcontext(311259)]		HRESULT LookAt([in] Direct3DRMFrame3 *tgt, [in] Direct3dRMFrame3 *reference, [in] D3DRMFrameConstraint contraint);
		[helpcontext(311260)]		HRESULT Move( [in] float delta);
	
		[helpcontext(311261)]		HRESULT RayPick([in]Direct3DRMFrame3 *refer,[in]D3DRMRAY *ray,[in]d3drmRayPickFlags flags,[out,retval]Direct3dRMPick2Array **retv);
       	[helpcontext(311262)]		HRESULT Save([in]BSTR name,[in] D3DRMXofFormat format, [in] d3drmSaveFlags flags);
		[helpcontext(311263)]		HRESULT SetAxes([in]float dx,[in]float dy,[in]float dz,[in]float ux,[in]float uy,[in]float uz);
		[helpcontext(311264)]		HRESULT SetBox([in]D3DRMBOX *box);
		[helpcontext(311265)]		HRESULT SetBoxEnable([in] DBOOLFlags boxEnable);
		[helpcontext(311266)]		HRESULT SetColor([in] D3Dcolor c);
		[helpcontext(311267)]		HRESULT SetColorRGB([in] float r, [in] float g, [in] float b);
		
		[helpcontext(311268)]		HRESULT SetInheritAxes([in]DBOOLFlags inheritFromParent);
		
		[helpcontext(311269)]		HRESULT SetMaterial([in] Direct3DRMMaterial2 *mat);
		[helpcontext(311270)]		HRESULT SetMaterialMode([in] D3DRMMaterialMode val);		
		[helpcontext(311271)]		HRESULT SetMaterialOverride([in,out] D3DRMMATERIALOVERRIDE *override);
		[helpcontext(311272)]		HRESULT SetMaterialOverrideTexture([in] Direct3DRMTexture3 *tex);

		[helpcontext(311273)]		HRESULT SetOrientation( [in] Direct3DRMFrame3 *reference, [in] float dx,
								  [in] float dy, [in] float dz, [in] float ux,
									[in] float uy, [in] float uz);

		[helpcontext(311274)]		HRESULT SetPosition( [in] Direct3DRMFrame3 *reference, [in] float x,
													[in] float y, [in] float z);
		[helpcontext(311275)]		HRESULT SetQuaternion([in]Direct3DRMFrame3 *reference,D3DRMQUATERNION *quat);

		[helpcontext(311276)]		HRESULT SetRotation( [in] Direct3DRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] float theta);

		[helpcontext(311277)]		HRESULT SetSceneBackground([in] D3Dcolor c);		
		[helpcontext(311278)]		HRESULT SetSceneBackgroundDepth([in] DirectDrawSurface7 *s);
		[helpcontext(311279)]		HRESULT SetSceneBackgroundImage([in] Direct3DRMTexture3 *i);
		[helpcontext(311280)]		HRESULT SetSceneBackgroundRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(311281)]		HRESULT SetSceneFogColor([in] D3Dcolor c);
		[helpcontext(311282)]		HRESULT SetSceneFogEnable([in] DBOOLFlags benable);  
		[helpcontext(311283)]		HRESULT SetSceneFogMethod([in] D3DRMFogMethod method);  
		[helpcontext(311284)]		HRESULT SetSceneFogMode([in] D3DRMFogMode c);
		[helpcontext(311285)]		HRESULT SetSceneFogParams([in] float start, [in] float end, [in] float density);
		[helpcontext(311286)]		HRESULT SetSortMode([in] D3DRMSortMode val);
		[helpcontext(311287)]		HRESULT SetTexture([in] Direct3DRMTexture3 *t);

		[helpcontext(311288)]		HRESULT SetTraversalOptions([in] D3DRMTraversalFlags flags);

		[helpcontext(311289)]		HRESULT SetVelocity( [in] Direct3DRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] DBOOLFlags with_rotation);

		[helpcontext(311290)]		HRESULT SetZbufferMode([in] D3DRMZbufferMode val);
		
	};


	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE26-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMMeshBuilder3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311400)
	]
	interface Direct3DRMMeshBuilder3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR
		
	    /*
		 * IDirect3DRMMeshBuilder methods
		*/
		[helpcontext(311409)]		HRESULT AddFace([in] Direct3DRMFace2 *f);
		[helpcontext(311410)]		HRESULT AddFaces([in] long vc, [in] SAFEARRAY(D3DVECTOR) *verexArray,
						 [in] long nc, [in] SAFEARRAY(D3DVECTOR) *normalArray,
						 [in] SAFEARRAY(long) *data, 
						 [out, retval] Direct3DRMFaceArray **array );

		[helpcontext(311411)]		HRESULT AddFacesIndexed([in] D3DRMAddFacesFlags flags, [in] SAFEARRAY(long) *indexArray,[out,retval] long *newFaceIndex);

		[helpcontext(311412)]		HRESULT AddFrame([in] Direct3DRMFrame3 *frame);
		[helpcontext(311413)]		HRESULT AddMesh([in] Direct3DRMMesh *mesh);
		[helpcontext(311414)]		HRESULT AddMeshBuilder([in] Direct3DRMMeshBuilder3 *meshbuilder, D3DRMAddMeshbuilderFlags flags);				
		[helpcontext(311415)]		HRESULT AddNormal([in] float x, [in] float y,[in] float z, [out, retval] int *index);
		[helpcontext(311416)]		HRESULT AddTriangles([in] D3DRMAddTrianglesVt format,[in] long vertexcount,[in] void *data);		
		[helpcontext(311417)]		HRESULT AddVertex([in] float x, [in] float y,[in] float z, [out, retval] int *index);
		
		[helpcontext(311418)]		HRESULT CreateFace([out, retval] Direct3DRMFace2 **retv);		
		[helpcontext(311419)]		HRESULT CreateMesh( [out,retval] Direct3DRMMesh **retv);
		[helpcontext(311420)]		HRESULT CreateSubMesh( [out,retval] Direct3DRMMeshBuilder3 **retv);
		
		[helpcontext(311421)]		HRESULT DeleteFace([in] Direct3DRMFace2 *face);
  	    	[hidden]				HRESULT DeleteNormals([in] long id, [in] long count);
		[helpcontext(311422)]		HRESULT DeleteSubMesh([in] Direct3DRMMeshBuilder3 *mesh);
		[hidden]				HRESULT DeleteVertices([in] long id, [in] long count);
		[helpcontext(311423)]		HRESULT Empty();
		[helpcontext(311424)]		HRESULT EnableMesh([in] D3DRMAddMeshBuilderFlags flags);
		[helpcontext(311425)]		HRESULT GenerateNormals(float angle,D3DRMGenerateNormalsFlags flags);

		[helpcontext(311426)]		HRESULT GetBox( [in,out] D3DRMBOX *retv);		
		[helpcontext(311427)]		HRESULT GetColorSource( [out, retval] D3DRMColorSource *data);
		[helpcontext(311428)]		HRESULT GetEnable([out,retval] D3DRMAddMeshBuilderFlags *flags);
		[helpcontext(311429)]		HRESULT GetFace([in] long id,[out, retval] Direct3DRMFace2 **retv);		
		[helpcontext(311430)]		HRESULT GetFaceCount([out, retval] int *retv);
		[helpcontext(311431)]		HRESULT GetFaces([out, retval] Direct3DRMFaceArray **retv);				
		
		[helpcontext(311432)]		HRESULT GetGeometry( [in,out] SAFEARRAY(D3DVECTOR) *verexArray,
						  [in,out] SAFEARRAY(D3DVECTOR) *normalArray,
						 [in,out] SAFEARRAY(long) *faceData);
		
		[helpcontext(311433)]		HRESULT GetNormal([in] long index, [in,out] D3DVECTOR *desc);
		[helpcontext(311434)]		HRESULT GetNormalCount([out, retval] long *normalCount);

		[helpcontext(311435)]		HRESULT GetParentMesh([in] D3DRMParentingFlags flags, [out,retval] Direct3dRMMeshBuilder3 **vis);
		[helpcontext(311436)]		HRESULT GetPerspective([out,retval] long *retv); //BOOL
		[helpcontext(311437)]		HRESULT GetQuality([out,retval] D3DRMRenderQuality *retv);

		[helpcontext(311438)]		HRESULT GetSubMeshes([in] long count,[in,out] SAFEARRAY(Direct3DRMMeshBuilder3) *arrayOfMeshBuilders);
		[helpcontext(311439)]		HRESULT GetSubMeshCount([out,retval] long *count);

		[helpcontext(311440)]		HRESULT GetTextureCoordinates([in] long idx,[in,out] float *u,[in,out] float *v);
		
		[helpcontext(311441)]		HRESULT GetVertex([in] long id, [in,out] D3DVECTOR *vec);

		[helpcontext(311442)]		HRESULT GetVertexColor([in] long index, [out, retval] D3Dcolor *retv);				
		[helpcontext(311443)]		HRESULT GetVertexCount([out, retval] int *retv);		
		
		[helpcontext(311444)]		HRESULT GetFaceDataSize([out, retval] long *faceCount);						
		
		[helpcontext(311445)]		HRESULT LoadFromFile( [in] BSTR filename, [in] VARIANT id, [in] D3DRMLoadFlags flags, [in] Direct3dRMLoadTextureCallback3 *loadTextureImplementation, [in] USERARG *userArgument);

		[helpcontext(311446)]		HRESULT Optimize();

        [helpcontext(311447)]		HRESULT Save([in] BSTR fname, [in] D3DRMXofFormat xFormat, [in] d3drmSaveFlags save);

		[helpcontext(311448)]		HRESULT ScaleMesh( [in] float sx, [in] float sy, [in] float sz);

		[helpcontext(311449)]		HRESULT SetColor([in] D3Dcolor col);
		[helpcontext(311450)]		HRESULT SetColorRGB( [in] float red, [in] float green, [in] float blue);
		[helpcontext(311451)]		HRESULT SetColorSource([in] D3DRMColorSource val);
		[helpcontext(311452)]		HRESULT SetMaterial([in] Direct3DRMMaterial2 *mat);
		[helpcontext(311453)]		HRESULT SetNormal([in] long idx,[in] float x,[in] float y,[in] float z);
		
		[helpcontext(311454)]		HRESULT SetPerspective([in] DBOOLFlags perspectiveEnabled);  //BOOL
		[helpcontext(311455)]		HRESULT SetQuality( [in] D3DRMRenderQuality q);
		[helpcontext(311456)]		HRESULT SetTexture( [in] Direct3DRMTexture3 *tex);
		[helpcontext(311457)]		HRESULT SetTextureCoordinates([in] long idx, [in] float u, [in] float v);
		[helpcontext(311458)]		HRESULT SetTextureTopology([in] DBOOLFlags wrap_u, [in] DBOOLFlags wrap_v);  //BOOL
		[helpcontext(311459)]		HRESULT SetVertex([in] long idx,[in] float x,[in] float y,[in] float z);
		[helpcontext(311460)]		HRESULT SetVertexColor([in] long idx, [in] D3Dcolor c);
		[helpcontext(311461)]		HRESULT SetVertexColorRGB( [in] long idx, [in] float r, [in] float g, [in] float b);				
		[helpcontext(311462)]		HRESULT Translate([in] float tx, [in] float ty, [in] float tz);
		
		//getVertices left unimplemented
		//set vertices not implmented
		//set normals not implemented

		
		[hidden]		HRESULT AddFacesJava([in] long vc, [in] float *ver,
						 [in] long nc, [in] float *norm, [in] long *data, [out, retval] Direct3DRMFaceArray **array );
		

	};

	[
		object,
		uuid(9F76FE27-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMDevice3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311600)
	]
	interface Direct3DRMDevice3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		
		//
		// D3DRMObjects
		//
		
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR
		
		
		[helpcontext(311609)]		HRESULT AddUpdateCallback([in] Direct3DRMDeviceUpdateCallback3 *updateCallbackImplementation, [in] USERARG *userArgument);
		[helpcontext(311610)]		HRESULT DeleteUpdateCallback([in] Direct3DRMDeviceUpdateCallback3 *updateCallbackImplementation, [in]  USERARG *userArgument);		
		[helpcontext(311611)]		HRESULT FindPreferredTextureFormat([in] DDBitDepthFlags bitDepth,[in] D3DRMFptfFlags flags, [in,out] DDPIXELFORMAT *ddpf);
		[helpcontext(311612)]		HRESULT GetBufferCount([out, retval] long *retv);
		[helpcontext(311613)]		HRESULT GetColorModel( [out, retval] D3DColorModel *retv);
		[helpcontext(311614)]		HRESULT GetDither([out, retval] DBOOLFlags *ditherEnabled);		
		[helpcontext(311615)]		HRESULT GetHeight([out, retval] int *w);
		[helpcontext(311616)]		HRESULT GetQuality([out, retval] D3DRMRenderQuality *retv);
		[helpcontext(311617)]		HRESULT GetRenderMode([out, retval] D3DRMRenderModeFlags *retv);
		[helpcontext(311618)]		HRESULT GetShades([out, retval] long *numShades);
		[helpcontext(311619)]		HRESULT GetTextureQuality( [out, retval] D3DRMTextureQuality *retv);
		[helpcontext(311620)]		HRESULT GetTrianglesDrawn([out, retval] long *retv); //no params internally
		[helpcontext(311621)]		HRESULT GetViewports([out,retval] Direct3DRMViewportArray **views);
		[helpcontext(311622)]		HRESULT GetWireframeOptions([out, retval] D3DRMWireFrameFlags *retv); //no params internally
		[helpcontext(311623)]		HRESULT GetWidth([out, retval] int *w);		
		[helpcontext(311624)]		HRESULT SetBufferCount([in] long count);		
		[helpcontext(311625)]		HRESULT SetDither([in] DBOOLFlags ditherEnabled);		
		[helpcontext(311626)]		HRESULT SetQuality( [in] D3DRMRenderQuality q);
		[helpcontext(311627)]		HRESULT SetRenderMode([in] D3DRMRenderModeFlags flags);
		[helpcontext(311628)]		HRESULT SetShades( [in] int numShades);
		[helpcontext(311629)]		HRESULT SetTextureQuality( [in] D3DRMTextureQuality d);
		[helpcontext(311630)]		HRESULT Update();		
		// Respond to a WM_ACTIVATE message.
		[helpcontext(311631)]		HRESULT HandleActivate([in] long wparam) ;	
		[helpcontext(311632)]		HRESULT HandlePaint([in] long hdc) ;

		

	};




	[
		object,
		uuid(9F76FE28-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMTexture3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311800)
	]
	interface Direct3DRMTexture3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// D3DRMObject methods
		//
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		//
		// IDirect3DRMTexture3 methods
		//
		[helpcontext(311809)]		HRESULT Changed([in] D3DRMTextureChangedFlags flags, [in] long nRects,[in] SAFEARRAY(RECT) *rects); //BOOL values
		[helpcontext(311810)]		HRESULT GenerateMIPMap();
		[helpcontext(311811)]		HRESULT GetCacheFlags([out,retval] D3DRMTextureCacheFlags *ret);
		[helpcontext(311812)]		HRESULT GetCacheImportance([out,retval] long *ret);
		[helpcontext(311813)]		HRESULT GetColors([out, retval] long *c);
		[helpcontext(311814)]		HRESULT GetDecalOrigin([out] long *x, [out] long *y);		
		[helpcontext(311815)]		HRESULT GetDecalScale([out, retval] DBOOLFlags *considerScale);
		[helpcontext(311816)]		HRESULT GetDecalSize([out] float *w, [out] float *h);
		[helpcontext(311817)]		HRESULT GetDecalTransparency([out, retval] DBOOLFlags *enabled); //BOOL
		[helpcontext(311818)]		HRESULT GetDecalTransparentColor([out, retval] D3Dcolor *tc);				
		[helpcontext(311819)]		HRESULT GetShades([out, retval] long *shades);		
		[helpcontext(311820)]		HRESULT GetSurface( [in] long flags,[out, retval] DirectDrawSurface4 **surface);
		[helpcontext(311821)]		HRESULT SetCacheOptions([in] long importance, [in] D3DRMTextureCacheFlags flags);				
		[helpcontext(311822)]		HRESULT SetColors([in] long numColors);
		[helpcontext(311823)]		HRESULT SetDecalOrigin([in] long x, [in] long y);						
		[helpcontext(311824)]		HRESULT SetDecalScale([in] DBOOLFlags considerScale);
		[helpcontext(311825)]		HRESULT SetDecalSize([in] float width, [in] float height);
		[helpcontext(311826)]		HRESULT SetDecalTransparency([in] DBOOLFlags transparencyEnabled);  //BOOL
		[helpcontext(311827)]		HRESULT SetDecalTransparentColor([in] D3Dcolor tcolor);		
		[helpcontext(311828)]		HRESULT SetShades([in] long numShades);

		//note setDownSample callback and setValidation callback not supported
				
	};



	[
		object,
		uuid(9F76FE30-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMClippedVisual Interface"),
		pointer_default(unique),
		local,
		helpcontext(312000)
	]
	interface Direct3DRMClippedVisual : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// D3DRMObject methods
		//
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		[helpcontext(312009)]		HRESULT AddPlane([in] Direct3DRMFrame3 *ref, [in,out] D3DVECTOR *point, [in,out] D3DVECTOR *normal, [out,retval] long *ret);
		[helpcontext(312010)]		HRESULT DeletePlane([in] long id);
		[helpcontext(312011)]		HRESULT GetPlane([in] long id,[in] Direct3DRMFrame3 *ref, [in,out] D3DVECTOR *point, [in,out] D3DVECTOR *normal);
		[helpcontext(312012)]		HRESULT GetPlaneIds([in] long count, [in,out] SAFEARRAY(long) *arrayOfIds);
		[helpcontext(312013)]		HRESULT GetPlaneIdsCount([out,retval] long *count);		
		[helpcontext(312014)]		HRESULT SetPlane([in] long id,[in] Direct3DRMFrame3 *ref, [in,out] D3DVECTOR *point, [in,out] D3DVECTOR *normal);
	};
    

	[
		object,
		uuid(9F76FE31-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMProgressiveMesh Interface"),
		pointer_default(unique),
		local,
		helpcontext(312200)

	]
	interface Direct3DRMProgressiveMesh : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// D3DRMObject methods
		//
		[helpcontext(306201)]		HRESULT AddDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT DeleteDestroyCallback([in] Direct3DRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT CloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT SetAppData( [in] long data);
		[helpcontext(306205)]		HRESULT GetAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT SetName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT GetName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT GetClassName([out,retval] BSTR *name);	//LPSTR

		[helpcontext(312209)]		HRESULT LoadFromFile([in] BSTR sFile, [in] VARIANT id,[in] D3DRMLoadFlags options, [in] Direct3dRMLoadTextureCallback3 *loadTextureImplementation,[in] USERARG *userArgument);
		[helpcontext(312210)]		HRESULT GetLoadStatus([in,out] D3DRMPMESHLOADSTATUS *loadStatus);
		[helpcontext(312211)]		HRESULT SetMinRenderDetail([in] float val);
		[helpcontext(312212)]		HRESULT Abort();
		[helpcontext(312213)]		HRESULT GetFaceDetail([out,retval] long *count);
		[helpcontext(312214)]		HRESULT GetVertexDetail([out,retval] long *count);
		[helpcontext(312215)]		HRESULT SetFaceDetail([in] long count);
		[helpcontext(312216)]		HRESULT SetVertexDetail([in] long count);
		[helpcontext(312217)]		HRESULT GetFaceDetailRange([in,out] long *min,[in,out] long *max);
		[helpcontext(312218)]		HRESULT GetVertexDetailRange([in,out] long *min,[in,out] long *max);
		[helpcontext(312219)]		HRESULT GetDetail([out,retval] float *detail);
		[helpcontext(312220)]		HRESULT SetDetail([in] float detail);
		[helpcontext(312221)]		HRESULT RegisterEvents([in] long hEvent,[in] long flags,[in] long reserved);
		[helpcontext(312222)]		HRESULT CreateMesh([out,retval] Direct3DRMMesh **mesh);
		[helpcontext(312223)]		HRESULT Duplicate([out,retval] Direct3DRMProgressiveMesh **mesh);
		[helpcontext(312224)]		HRESULT GetBox([in,out] D3DRMBOX *box);
		[helpcontext(312225)]		HRESULT SetQuality(D3DRMRenderQuality quality);
		[helpcontext(312226)]		HRESULT GetQuality([out,retval] D3DRMRenderQuality *quality);
	};
    


///////////////////////////////////////////////////////////////////////////
// 
// Direct Sound Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FB00-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectSound Interface"),
		pointer_default(unique),
		local,
		helpcontext(312400)
	]
	interface DirectSound : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		//
		//*** IDirectSound methods ***
		//
		[helpcontext(312401)]		HRESULT CreateSoundBuffer([in] DSBUFFERDESC *bufferDesc,
								[in] WAVEFORMATEX *format,
								[out, retval] DirectSoundBuffer **soundBuffer);

		[helpcontext(312402)]		HRESULT CreateSoundBufferFromFile([in] BSTR fileName, [in,out] DSBUFFERDESC *bufferDesc,
								[out] WAVEFORMATEX *format,
								[out, retval] DirectSoundBuffer **soundBuffer);

		[helpcontext(312403)]		HRESULT CreateSoundBufferFromResource([in] BSTR dll, [in] BSTR resourceName, [in,out] DSBUFFERDESC *bufferDesc,
								[out] WAVEFORMATEX *format,
								[out, retval] DirectSoundBuffer **soundBuffer);

		[helpcontext(312404)]		HRESULT GetCaps([in,out] DSCAPS *caps);
		[helpcontext(312405)]		HRESULT DuplicateSoundBuffer([in] DirectSoundBuffer *original, 
									[out, retval] DirectSoundBuffer **duplicate);
		
		[helpcontext(312406)]		HRESULT SetCooperativeLevel([in] HWnd hwnd, [in] DSSCLFlags level);		
		[helpcontext(312407)]		HRESULT GetSpeakerConfig([out,retval] DSSpeakerFlags *speakerConfig);
		[helpcontext(312408)]		HRESULT SetSpeakerConfig([in] DSSpeakerFlags speakerConfig);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FB01-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectSoundBuffer Interface"),
		pointer_default(unique),
		local,
		helpcontext(312600)
	]
	interface DirectSoundBuffer : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		//
		/*** IDirectSoundBuffer methods ***/
		//
		[helpcontext(312601)]		HRESULT GetDirectSound3DListener([out, retval] DirectSound3dListener **lpdsl);
		[helpcontext(312602)]		HRESULT GetDirectSound3DBuffer([out, retval] DirectSound3dBuffer **lpdsb);
		[helpcontext(312603)]		HRESULT GetCaps([in,out] DSBCAPS *caps);
		[helpcontext(312604)]		HRESULT GetCurrentPosition([out] DSCURSORS *cursors);
		
		
		[helpcontext(312605)]		HRESULT GetFormat([in,out] WAVEFORMATEX *format);
		[helpcontext(312606)]		HRESULT GetVolume([out,retval] long *volume);
		[helpcontext(312607)]		HRESULT GetPan([out,retval] long *pan);
		[helpcontext(312608)]		HRESULT GetFrequency([out,retval] long *frequency);
		[helpcontext(312609)]		HRESULT GetStatus([out,retval] DSBStatusFlags *status);
		[hidden]		HRESULT Initialize([in] DirectSound *directSound, 
							[in,out] DSBUFFERDESC *bufferDesc, [in,out] byte *wbuf);


		[helpcontext(312610)]		HRESULT WriteBuffer([in] long start, [in] long size, [in] ABYTE *buffer, [in] DSBLockFlags flags);
		[helpcontext(312611)]		HRESULT ReadBuffer([in] long start, [in] long size, [in] ABYTE *buffer, [in] DSBLockFlags flags);
		[helpcontext(312612)]		HRESULT Play([in] DSBPlayFlags flags);
		[helpcontext(312613)]		HRESULT SetCurrentPosition([in] long newPosition);
		[helpcontext(312614)]		HRESULT SetFormat([in] WAVEFORMATEX *format);
		[helpcontext(312615)]		HRESULT SetVolume([in] long volume);
		[helpcontext(312616)]		HRESULT SetPan([in] long pan);
		[helpcontext(312617)]		HRESULT SetFrequency([in] long frequency);
		[helpcontext(312618)]		HRESULT Stop();
		[helpcontext(312619)]		HRESULT Restore();
		[helpcontext(312620)]		HRESULT SetNotificationPositions(long nElements, SAFEARRAY(DSBPOSITIONNOTIFY) *psa); 
		[helpcontext(312621)]		HRESULT SaveToFile([in] BSTR filename);
		
	};


	///////////////////////////////////////////////////////////////////////////
	// DirectSound3DListener
	[
		object,
		uuid(9F76FB02-8E92-11d1-8808-00C04FC2C602),		
		helpstring("DirectSound3DListener Interface"),
		pointer_default(unique),
		local,
		helpcontext(312800)
	]
	interface DirectSound3DListener: IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		/*** IDirectSound3D methods ***/
		//
		[helpcontext(312801)]		HRESULT GetAllParameters( [in,out] DS3DLISTENER *listener );
		[helpcontext(312802)]		HRESULT GetDistanceFactor( [out,retval] float *distanceFactor );
		[helpcontext(312803)]		HRESULT GetDopplerFactor( [out,retval] float *dopplerFactor );
		[helpcontext(312804)]		HRESULT GetOrientation( [in,out] D3DVECTOR *orientFront, [in,out] D3DVECTOR *orientTop );
		[helpcontext(312805)]		HRESULT GetPosition( [out] D3DVECTOR *position );
		[helpcontext(312806)]		HRESULT GetRolloffFactor( [out,retval] float* rolloffFactor );
		[helpcontext(312807)]		HRESULT GetVelocity( [out,retval] D3DVECTOR *velocity );
		[helpcontext(312808)]		HRESULT SetAllParameters( [in] DS3DLISTENER *listener, [in] ds3dApplyFlags  applyFlag);
		[helpcontext(312809)]		HRESULT SetDistanceFactor( [in] float distanceFactor, [in] DS3DApplyFlags applyFlag);
		[helpcontext(312810)]		HRESULT SetDopplerFactor( [in] float dopplerFactor, [in] DS3DApplyFlags applyFlag);
		[helpcontext(312811)]		HRESULT SetOrientation( [in] float xFront, [in] float yFront, [in] float zFront, 
								[in] float xTop, [in] float yTop, [in] float zTop, 
								[in] DS3DApplyFlags applyFlag);
		[helpcontext(312812)]		HRESULT SetPosition( [in] float x , [in] float y, [in] float z, [in] DS3DApplyFlags applyFlag);
		[helpcontext(312813)]		HRESULT SetRolloffFactor( [in] float rolloffFactor, [in] DS3DApplyFlags applyFlag);
		[helpcontext(312814)]		HRESULT SetVelocity( [in] float x, [in] float y, [in] float z, [in] DS3DApplyFlags applyFlag);
		[helpcontext(312815)]		HRESULT CommitDeferredSettings();
		[helpcontext(312816)]		HRESULT GetDirectSoundBuffer([out,retval] DirectSoundBuffer **retVal);
	};

	///////////////////////////////////////////////////////////////////////////
	// IDirectSound3DBuffer
	[
		object,
		uuid(9F76FB03-8E92-11d1-8808-00C04FC2C602),		
		helpstring("DirectSound3DBuffer Interface"),
		pointer_default(unique),
		local,
		helpcontext(313000)
	]
	interface DirectSound3DBuffer : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		/*** IDirectSoundBuffer3D methods ***/
		//
		[helpcontext(313001)]		HRESULT GetDirectSound3DListener([out,retval] DirectSound3dListener **retVal);
		[helpcontext(313002)]		HRESULT GetDirectSoundBuffer([out,retval] DirectSoundBuffer **retVal);
		[helpcontext(313003)]		HRESULT GetAllParameters( [in,out] DS3DBUFFER *buffer );
		[helpcontext(313004)]		HRESULT GetConeAngles( [in,out]  long *inCone, [in,out]  long *outCone );
		[helpcontext(313005)]		HRESULT GetConeOrientation( [in,out] D3DVECTOR* orientation );
		[helpcontext(313006)]		HRESULT GetConeOutsideVolume( [out,retval] long * coneOutsideVolume );
		[helpcontext(313007)]		HRESULT GetMaxDistance( [out,retval] float* maxDistance );
		[helpcontext(313008)]		HRESULT GetMinDistance( [out,retval] float* minDistance );
		[helpcontext(313009)]		HRESULT GetMode( [out,retval]  DS3DModeFlags *mode );
		[helpcontext(313010)]		HRESULT GetPosition( [in,out] D3DVECTOR* position );
		[helpcontext(313011)]		HRESULT GetVelocity( [in,out] D3DVECTOR* velocity );
		[helpcontext(313012)]		HRESULT SetAllParameters( [in] DS3DBUFFER *buffer,[in] ds3dApplyFlags applyFlag);
		[helpcontext(313013)]		HRESULT SetConeAngles( [in] long inCone, [in] long outCone, [in] DS3DApplyFlags applyFlag);
		[helpcontext(313014)]		HRESULT SetConeOrientation( [in] float x , [in] float y, [in] float z, [in] DS3DApplyFlags applyFlag);
		[helpcontext(313015)]		HRESULT SetConeOutsideVolume( [in] long coneOutsideVolume,[in] DS3DApplyFlags applyFlag);
		[helpcontext(313016)]		HRESULT SetMaxDistance( [in] float maxDistance,[in]  DS3DApplyFlags applyFlag);
		[helpcontext(313017)]		HRESULT SetMinDistance( [in] float minDistance,[in]  DS3DApplyFlags applyFlag);
		[helpcontext(313018)]		HRESULT SetMode( [in]  DS3DModeFlags mode,[in]  ds3dApplyFlags applyFlag);
		[helpcontext(313019)]		HRESULT SetPosition( [in] float x , [in] float y, [in] float z, [in] DS3DApplyFlags applyFlag);
		[helpcontext(313020)]		HRESULT SetVelocity( [in] float x , [in] float y, [in] float z, [in] DS3DApplyFlags applyFlag);		
	};

	[
		object,
		uuid(9F76FB04-8E92-11d1-8808-00C04FC2C602),	
		helpstring("DirectSoundCapture Interface"),
		pointer_default(unique),
		local,
		helpcontext(313200)
	]
	interface DirectSoundCapture : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(313201)]		HRESULT CreateCaptureBuffer([in] DSCBUFFERDESC *bufferDesc,[out,retval] DirectSoundCaptureBuffer **ret);
		[helpcontext(313202)]		HRESULT GetCaps([in,out] DSCCAPS *caps);
	
	};
	

	[
		object,
		uuid(9F76FB05-8E92-11d1-8808-00C04FC2C602),	
		helpstring("DirectSoundCaptureBuffer Interface"),
		pointer_default(unique),
		helpcontext(313400)

	]
	interface DirectSoundCaptureBuffer : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(313401)]		HRESULT GetCaps([in,out] DSCBCAPS *caps);		
		[helpcontext(313402)]		HRESULT GetCurrentPosition([in,out] DSCURSORS *cursors);
		[helpcontext(313403)]		HRESULT GetFormat([in,out] WAVEFORMATEX *waveformat);
		[helpcontext(313404)]		HRESULT GetStatus([out,retval] DSCBStatusFlags * status);
		[hidden]				HRESULT Initialize([in]DirectSoundCaptureBuffer *captureBuffer,[in] DSCBUFFERDESC *bufferDesc);
		[helpcontext(313405)]		HRESULT Start([in] DSCBStartFlags flags);
		[helpcontext(313406)]		HRESULT Stop();
		[helpcontext(313407)]		HRESULT WriteBuffer([in] long start, [in] long size, [in] ALONG *buffer, [in] DSCBLockFlags flags);
		[helpcontext(313408)]		HRESULT ReadBuffer([in] long start, [in] long size, [in] ALONG *buffer, [in] DSCBLockFlags flags);
		[helpcontext(313409)]		HRESULT SetNotificationPositions(long nElements, SAFEARRAY(DSBPOSITIONNOTIFY) *psa); 

	};

	[
		object,
		uuid(9F76FB07-8E92-11d1-8808-00C04FC2C602),	
		helpstring("DirectSoundEnum Interface"),
		pointer_default(unique),
		local,
		helpcontext(313600)
	]
	interface DirectSoundEnum : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(313601)]		HRESULT GetGuid([in] long index,[out,retval] BSTR *guid);
		[helpcontext(313602)]		HRESULT GetDescription([in] long index,[out,retval] BSTR *guid);
		[helpcontext(313603)]		HRESULT GetName([in] long index,[out,retval] BSTR *guid);
        	[helpcontext(313604)]		HRESULT GetCount([out,retval]long *count);		
	};

///////////////////////////////////////////////////////////////////////////
// 
// Direct Input Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FA02-8E92-11d1-8808-00C04FC2C602),
		helpstring("DirectInput Interface"),
		pointer_default(unique),
		local,
		helpcontext(313800)
	]
	interface DirectInput : IUnknown	
	{
		import "oaidl.idl";        
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

        [helpcontext(313801)]		HRESULT CreateDevice([in] BSTR guid, [out,retval] DirectInputDevice **dev);        
	  [helpcontext(313802)]		HRESULT GetDIEnumDevices([in] DIDeviceType deviceType, [in] diEnumDevicesFlags flags, [out,retval] DirectInputEnumDevices **retVal);
        [helpcontext(313803)]		HRESULT GetDeviceStatus([in] BSTR guid, [out,retval] VARIANT_BOOL *status);
        [helpcontext(313804)]		HRESULT RunControlPanel([in] long hwndOwner);                
	};

	[
		object,
		uuid(9F76FA04-8E92-11d1-8808-00C04FC2C602),
        	helpstring("DirectInputDeviceInstance Interface"),
		pointer_default(unique),
		local,
		helpcontext(314000)
	]
	interface DirectInputDeviceInstance : IUnknown
	{
		[helpcontext(314001)]		HRESULT GetGuidInstance([out,retval] BSTR *ret);
		[helpcontext(314002)]		HRESULT GetGuidProduct([out,retval] BSTR *ret);
		[helpcontext(314003)]		HRESULT GetProductName([out,retval] BSTR *ret);
		[helpcontext(314004)]		HRESULT GetInstanceName([out,retval] BSTR *ret);
		[helpcontext(314005)]		HRESULT GetGuidFFDriver([out,retval] BSTR *ret);
		[helpcontext(314006)]		HRESULT GetUsagePage([out,retval] short *ret);
		[helpcontext(314007)]		HRESULT GetUsage([out,retval] short *ret);
		[helpcontext(314008)]		HRESULT GetDevType([out,retval] long *ret);

	};



	[
		object,
		uuid(9F76FA05-8E92-11d1-8808-00C04FC2C602),
	      helpstring("DirectInputDeviceObjectInstance Interface"),
		pointer_default(unique),
		local,
		helpcontext(314200)
	]
	interface DirectInputDeviceObjectInstance : IUnknown
	{
		[helpcontext(314201)]		HRESULT GetGuidType([out,retval] BSTR *ret);
		[helpcontext(314202)]		HRESULT GetOfs([out,retval] long *ret);
		[helpcontext(314203)]		HRESULT GetType([out,retval] long *ret);
		[helpcontext(314204)]		HRESULT GetFlags([out,retval] DIDeviceObjInstanceFlags *ret);
		[helpcontext(314205)]		HRESULT GetName([out,retval] BSTR *ret);
		[helpcontext(314206)]		HRESULT GetCollectionNumber([out,retval] short *ret);
		[helpcontext(314207)]		HRESULT GetDesignatorIndex([out,retval] short *ret);
		[helpcontext(314208)]		HRESULT GetUsagePage([out,retval] short *ret);
		[helpcontext(314209)]		HRESULT GetUsage([out,retval] short *ret);
		[helpcontext(314210)]		HRESULT GetDimension([out,retval] long *ret);
		[helpcontext(314211)]		HRESULT GetExponent([out,retval] short *ret);
		
	};

	[
		object,
		uuid(9F76FA03-8E92-11d1-8808-00C04FC2C602),
	      helpstring("DirectInputDevice Interface"),
		pointer_default(unique),
		local,
		helpcontext(314400)
	]
    interface DirectInputDevice : IUnknown 
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

        [helpcontext(314401)]		HRESULT Acquire();
	    [helpcontext(314402)]		HRESULT GetDeviceObjectsEnum([in] DIDFTFlags flags,[out,retval] DirectInputEnumDeviceObjects **ppret);
        [helpcontext(314403)]		HRESULT GetCapabilities([in,out] DIDEVCAPS *caps);
	    [helpcontext(314404)]		HRESULT GetDeviceData( [in,out] SAFEARRAY(DIDeviceOBJECTDATA) *deviceObjectDataArray,[in] DIDGDDFlags flags,[out,retval] long *c);		
	    [helpcontext(314405)]		HRESULT GetDeviceInfo([out,retval] DirectInputDeviceInstance **deviceInstance);
        [helpcontext(314406)]		HRESULT GetDeviceStateKeyboard ([in,out] DIKEYBOARDSTATE *state);
        [helpcontext(314407)]		HRESULT GetDeviceStateMouse    ([in,out] DIMOUSESTATE *state);
        [helpcontext(314408)]		HRESULT GetDeviceStateJoystick  ([in,out] DIJOYSTATE *state);
        [helpcontext(314409)]		HRESULT GetDeviceStateJoystick2 ([in,out] DIJOYSTATE2 *state);        		
	    [helpcontext(314410)]		HRESULT GetDeviceState([in] long cb, [in] void* state);
        [helpcontext(314411)]		HRESULT GetObjectInfo( [in] long obj, [in] DIPHFlags how, [out,retval] DirectInputDeviceObjectInstance **ret);
        [helpcontext(314412)]		HRESULT GetProperty([in] BSTR guid,[out] void *propertyInfo);
        [helpcontext(314413)]		HRESULT RunControlPanel([in] long hwnd);
        [helpcontext(314414)]		HRESULT SetCooperativeLevel([in] long hwnd, [in] DISCLFlags flags);
	    [helpcontext(314415)]		HRESULT SetCommonDataFormat([in] diCommonDataFormats format);
        [helpcontext(314416)]		HRESULT SetDataFormat([in] DIDATAFORMAT *format,SAFEARRAY(DIOBJECTDATAFORMAT) * formatArray);
        [helpcontext(314417)]		HRESULT SetEventNotification([in] long hEvent);
        [helpcontext(314418)]		HRESULT SetProperty([in] BSTR guid,[in] void *propertyInfo);
        [helpcontext(314419)]		HRESULT Unacquire();
	    [helpcontext(314420)]		HRESULT Poll();



	    [helpcontext(314421)]		HRESULT CreateEffect(
			[in] BSTR effectGuid,			
			[in] DIEFFECT *effectinfo,
			[out,retval] DirectInputEffect **ret);
	
	  [helpcontext(314422)]		HRESULT CreateCustomEffect(			
			[in] DIEFFECT *effectinfo,
			[in] long channels,
			[in] long samplePeriod,
			[in] long nSamples,
			[in] SAFEARRAY(long) *sampledata,
			[out,retval] DirectInputEffect **ret);

		


	   [helpcontext(314423)]		HRESULT SendDeviceData([in] long count,[in] SAFEARRAY(DIDeviceOBJECTDATA) *data, [in] disddFlags flags, [out,retval] long *retcount);
	   [helpcontext(314424)]		HRESULT SendForceFeedbackCommand([in] DISFFCFLAGS flags);
	   [helpcontext(314425)]		HRESULT GetForceFeedbackState([out,retval] DIGFFSFLAGS *state);
	   [helpcontext(314426)]		HRESULT GetEffectsEnum([in] DIEFTFLAGS effType,[out,retval] DirectInputEnumEffects **ret);

	};

	[
		object,
		uuid(BCAA7DA9-F7EF-11d2-93FD-00C04FC2C602),		
	      helpstring("DirectInputEffect Interface"),
		pointer_default(unique),
		local,
		helpcontext(314600)
	]
	interface DirectInputEffect : IUnknown 
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(314601)]		HRESULT Download();
		[helpcontext(314602)]		HRESULT GetEffectGuid([out,retval] BSTR *guid);
		[helpcontext(314603)]		HRESULT GetEffectStatus([out,retval] long *ret);
		[helpcontext(314604)]		HRESULT Start([in] long iterations, [in] long flags);
		[helpcontext(314605)]		HRESULT Stop();
		[helpcontext(314606)]		HRESULT Unload();
		[helpcontext(314607)]		HRESULT SetParameters([in] DIEFFECT *effectinfo,[in] DIEPFLAGS flags);
		[helpcontext(314608)]		HRESULT GetParameters([in,out] DIEFFECT *effectinfo);
	};

	[
		object,
		uuid(BCAA7DAA-F7EF-11d2-93FD-00C04FC2C602),		
        	helpstring("DirectInputEnumEffects Interface"),
		pointer_default(unique),
		local,
		helpcontext(314800)
	]
	interface DirectInputEnumEffects : IUnknown 
	{
		import "oaidl.idl";
		[helpcontext(314801)]		HRESULT GetCount([out,retval] long *ret);
		[helpcontext(314802)]		HRESULT GetEffectGuid([in] long i,[out,retval] BSTR *ret);
		[helpcontext(314803)]		HRESULT GetType([in] long i,[out,retval] DIEFTFLAGS *ret);
		[helpcontext(314804)]		HRESULT GetStaticParams([in] long i,[out,retval] DIEPFLAGS *ret);
		[helpcontext(314805)]		HRESULT GetDynamicParams([in] long i,[out,retval] DIEPFLAGS *ret);
		[helpcontext(314806)]		HRESULT GetName([in] long i, [out,retval] BSTR *ret);
	};		



	[
		object,
		uuid(9F76FA08-8E92-11d1-8808-00C04FC2C602),		
		helpstring("DirectInputEnumDeviceObjects Interface"),
		pointer_default(unique),
		local,
		helpcontext(315000)
	]
	interface DirectInputEnumDeviceObjects : IUnknown
	{
			import "oaidl.idl";
			[helpcontext(315001)]		HRESULT GetItem( [in]long index, [out,retval] DirectInputDeviceObjectInstance **info);
			[helpcontext(315002)]		HRESULT GetCount([out,retval]long *count);		
	};
	

	[
		object,
		uuid(9F76FA09-8E92-11d1-8808-00C04FC2C602),		
		helpstring("DirectInputEnumDevices Interface"),
		pointer_default(unique),
		local,
		helpcontext(315200)
	]

	interface DirectInputEnumDevices : IUnknown
	{
			import "oaidl.idl";
			[helpcontext(315201)]		HRESULT GetItem( [in]long index, [out,retval] DirectInputDeviceInstance **info);
			[helpcontext(315202)]		HRESULT GetCount([out,retval]long *count);		
	};

	
///////////////////////////////////////////////////////////////////////////
// 
// Direct3DRM Interpolator Interfaces
// 
///////////////////////////////////////////////////////////////////////////
	

	[
		object,
		uuid(9F76FE29-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3DRMInterpolator Interface"),
		pointer_default(unique),
		local,
		hidden,
		helpcontext(315400)
	]
	interface Direct3DRMInterpolator : IUnknown	
	{
 		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(315401)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(315402)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(315403)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(315404)]		HRESULT SetIndex([in] float val);
		[helpcontext(315405)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(315406)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);

        
	};

	[
		object,
		uuid(5F4637E1-62AC-11d2-90B1-00C04FC2C602),
		helpstring("Direct3DRMViewportInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(315600)
	]
	interface Direct3DRMViewportInterpolator : IUnknown	
	{
  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(315601)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(315602)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(315603)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(315604)]		HRESULT SetIndex([in] float val);
		[helpcontext(315605)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(315606)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);
     
		[helpcontext(315607)]		HRESULT SetFront([in] float val);	   
		[helpcontext(315608)]		HRESULT SetBack([in] float val);
		[helpcontext(315609)]		HRESULT SetField([in] float val);
		[helpcontext(315610)]		HRESULT SetPlane([in] float left, [in] float right,	[in] float bottom, [in] float top);
	};

	

	[
		object,
		uuid(5F4637E2-62AC-11d2-90B1-00C04FC2C602),
		helpstring("Direct3DRMFrameInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(315800)

	]
	interface Direct3DRMFrameInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(315801)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(315802)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(315803)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(315804)]		HRESULT SetIndex([in] float val);
		[helpcontext(315805)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(315806)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);

		[helpcontext(315807)]		HRESULT SetPosition( [in] Direct3DRMFrame3 *reference, [in] float x,
													[in] float y, [in] float z);
		[helpcontext(315808)]		HRESULT SetQuaternion([in]Direct3DRMFrame3 *reference,D3DRMQUATERNION *quat);

		[helpcontext(315809)]		HRESULT SetRotation( [in] Direct3DRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] float theta);

		[helpcontext(315810)]		HRESULT SetVelocity( [in] Direct3DRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] DBOOLFlags with_rotation);


		[helpcontext(315811)]		HRESULT SetOrientation( [in] Direct3DRMFrame3 *reference, [in] float dx,
								  [in] float dy, [in] float dz, [in] float ux,
									[in] float uy, [in] float uz);
     
		[helpcontext(315812)]		HRESULT SetSceneBackground([in] D3Dcolor c);		
		[helpcontext(315813)]		HRESULT SetSceneFogColor([in] D3Dcolor c);
		[helpcontext(315814)]		HRESULT SetSceneBackgroundRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(315815)]		HRESULT SetSceneFogParams([in] float start, [in] float end, [in] float density);

		[helpcontext(315816)]		HRESULT SetColor([in] D3Dcolor c);
		[helpcontext(315817)]		HRESULT SetColorRGB([in] float r, [in] float g, [in] float b);		

	};


	[
		object,
		uuid(5F4637E3-62AC-11d2-90B1-00C04FC2C602),
		helpstring("Direct3DRMeshInterpolator Interface"),
		pointer_default(unique),
		local,
	//	hidden,
		helpcontext(316000)
	]
	interface Direct3DRMMeshInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316001)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316002)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316003)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(316004)]		HRESULT SetIndex([in] float val);
		[helpcontext(316005)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(316006)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);


		[helpcontext(316007)]		HRESULT Translate([in] float tx, [in] float ty, [in] float tz);		
		[helpcontext(316008)]		HRESULT SetVertices([in] D3DRMGroupIndex id, [in] long idx, [in] long count, [in] SAFEARRAY(D3DRMVERTEX) *vertexArray);
		[helpcontext(316009)]		HRESULT SetGroupColor([in] D3DRMGroupIndex id, [in] d3dcolor val);
		[helpcontext(316010)]		HRESULT SetGroupColorRGB([in] D3DRMGroupIndex id, [in] float r,[in] float g, [in] float b);
	};



	[
		object,
		uuid(5F4637E4-62AC-11d2-90B1-00C04FC2C602),
		helpstring("Direct3DRMLightInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(316200)

	]
	interface Direct3DRMLightInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316201)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316202)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316203)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(316204)]		HRESULT SetIndex([in] float val);
		[helpcontext(316205)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(316206)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);


		//
		// IDirect3DRMLight methods - docdoc: based on iD3DRMObject!
		//
		
		[helpcontext(316207)]		HRESULT SetColor([in] D3Dcolor c);
		[helpcontext(316208)]		HRESULT SetColorRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(316209)]		HRESULT SetRange([in] float rng);
		[helpcontext(316210)]		HRESULT SetUmbra([in] float u);
		[helpcontext(316211)]		HRESULT SetPenumbra([in] float p);
		[helpcontext(316212)]		HRESULT SetConstantAttenuation([in] float atn);
		[helpcontext(316213)]		HRESULT SetLinearAttenuation([in] float atn);
		[helpcontext(316214)]		HRESULT SetQuadraticAttenuation([in] float atn);
	};



	[
		object,
		uuid(5F4637E5-62AC-11d2-90B1-00C04FC2C602),
		helpstring("Direct3DRMTextureInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(316400)
	]
	interface Direct3DRMTextureInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316401)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316402)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316403)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(316404)]		HRESULT SetIndex([in] float val);
		[helpcontext(316405)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(316406)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);

		[helpcontext(316407)]		HRESULT SetDecalOrigin([in] long x, [in] long y);
		[helpcontext(316408)]		HRESULT SetDecalSize([in] float width, [in] float height);
		[helpcontext(316409)]		HRESULT SetDecalTransparentColor([in] D3Dcolor tcolor);
		
	};


	[
		object,
		uuid(5F4637E6-62AC-11d2-90B1-00C04FC2C602),
		helpstring("Direct3DRMMaterialInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(316600)
	]
	interface Direct3DRMMaterialInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316601)]		HRESULT AttachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316602)]		HRESULT DetachObject([in] Direct3DRMObject *rmObject);
		[helpcontext(316603)]		HRESULT GetAttachedObjects([out,retval] Direct3DRMObjectArray **rmArray);
		[helpcontext(316604)]		HRESULT SetIndex([in] float val);
		[helpcontext(316605)]		HRESULT GetIndex([out,retval] float *val);
		[helpcontext(316606)]		HRESULT Interpolate([in] float val, [in] Direct3DRMObject *rmobject, [in] D3DRMInterpolationFlags options);

		[helpcontext(316607)]		HRESULT SetPower([in] float power);
		[helpcontext(316608)]		HRESULT SetSpecular([in] float red, [in] float green, [in] float blue);
		[helpcontext(316609)]		HRESULT SetEmissive([in] float red, [in] float green, [in] float blue);
		
	};

///////////////////////////////////////////////////////////////////////////
// 
// DirectMusic
// 
///////////////////////////////////////////////////////////////////////////

	#define MUSIC_TIME long
	#define REFERENCE_TIME long

	[
		object,
		uuid(FAFA35A0-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicLoader Interface"),
		pointer_default(unique),
		local,
		helpcontext(316800)
	]
	interface DirectMusicLoader : IUnknown	
	{
  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		// in place of GetObject we can have a function for each type -
		// load from Resource 
		[helpcontext(316801)]		HRESULT LoadSegment([in]BSTR filename, [out,retval] DirectMusicSegment **ret);
		[helpcontext(316802)]		HRESULT LoadStyle([in]BSTR filename, [out,retval] DirectMusicStyle **ret);
		[helpcontext(316803)]		HRESULT LoadBand([in]BSTR filename, [out,retval] DirectMusicBand **ret);
		[helpcontext(316804)]		HRESULT LoadCollection([in]BSTR filename, [out,retval] DirectMusicCollection **ret);

		[helpcontext(316805)]		HRESULT LoadSegmentFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] DirectMusicSegment **ret);
		[helpcontext(316806)]		HRESULT LoadStyleFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] DirectMusicStyle **ret);
		[helpcontext(316807)]		HRESULT LoadBandFromResource([in]BSTR moduleName,[in] BSTR resourceName, [out,retval] DirectMusicBand **ret);
		[helpcontext(316808)]		HRESULT LoadCollectionFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] DirectMusicCollection **ret);

		[helpcontext(316809)]		HRESULT SetSearchDirectory([in] BSTR dir);

		[helpcontext(316810)]		HRESULT LoadChordMap([in]BSTR filename, [out,retval] DirectMusicChordMap **ret);
		[helpcontext(316811)]		HRESULT LoadChordMapFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] DirectMusicChordMap **ret);
				
	};

	[
		object,
		uuid(FAFA35A1-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicSegment Interface"),
		pointer_default(unique),
		local,
		helpcontext(317000)
	]
	interface DirectMusicSegment : IUnknown	
	{
	
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
		/* DirectMusicSegment */
		[helpcontext(317001)]		HRESULT Clone  ([in] MUSIC_TIME mtStart, [in]   MUSIC_TIME mtEnd,   [out,retval]    DirectMusicSegment** ppSegment);
		[helpcontext(317002)]		HRESULT SetStartPoint            ([in] MUSIC_TIME mtStart) ;
		[helpcontext(317003)]		HRESULT GetStartPoint            ([out,retval]  MUSIC_TIME* pmtStart);
		[helpcontext(317004)]		HRESULT SetLoopPoints            ([in]  MUSIC_TIME mtStart,    [in]   MUSIC_TIME mtEnd);
		[helpcontext(317005)]		HRESULT GetLoopPointStart        ([out,retval] MUSIC_TIME* pmtStart);
		[helpcontext(317006)]		HRESULT GetLoopPointEnd          ([out,retval] MUSIC_TIME* pmtEnd);
		[helpcontext(317007)]		HRESULT GetLength                ([out,retval] MUSIC_TIME* pmtLength);
		[helpcontext(317008)]		HRESULT SetLength                ([in] MUSIC_TIME mtLength);
		[helpcontext(317009)]		HRESULT GetRepeats               ([out,retval] long* lRepeats);
		[helpcontext(317010)]		HRESULT SetRepeats               ([in] long  lRepeats) ;


		//track params
	
		[helpcontext(317011)]		HRESULT Download( [in] DirectMusicPerformance *performance);
		[helpcontext(317012)]		HRESULT Unload(  [in] DirectMusicPerformance *performance);
		[helpcontext(317013)]		HRESULT SetAutoDownloadEnable ( [in] VARIANT_BOOL b);		
		[helpcontext(317014)]		HRESULT SetTempoEnable (  [in] VARIANT_BOOL b);
		[helpcontext(317015)]		HRESULT SetTimeSigEnable (  [in] VARIANT_BOOL b);
		[helpcontext(317016)]		HRESULT SetStandardMidiFile( );
  	    	[helpcontext(317017)]		HRESULT ConnectToCollection (  [in] DirectMusicCollection *c);
		
	};


	[
		object,
		uuid(FAFA35A2-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicComposer Interface"),
		pointer_default(unique),
		local,
		helpcontext(317200)
	]
	interface DirectMusicComposer : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		
		[helpcontext(317201)]		HRESULT AutoTransition ([in] DirectMusicPerformance* performance, 
                                             [in] DirectMusicSegment* toSeg, 
                                             [in] long lCommand, 
                                             [in] long lFlags, 
											 [in] DirectMusicChordMap *chordmap,
                                             [out,retval] DirectMusicSegment** ppTransSeg);
		[helpcontext(317202)]		HRESULT ComposeSegmentFromTemplate   ([in]  DirectMusicStyle* style,
											 [in]  DirectMusicSegment* templateSeg, 
                                             [in]  short activity, 
											 [in] DirectMusicChordMap *chordmap,
                                             [out,retval] DirectMusicSegment** SectionSeg);

		[helpcontext(317203)]		HRESULT ComposeSegmentFromShape   ( [in]  DirectMusicStyle* style,
                                             [in]  short numberOfMeasures, 
											 [in]  short shape, 
											 [in]  short activity, 
											 [in] VARIANT_BOOL bIntro,
											 [in] VARIANT_BOOL bEnd,
											 [in] DirectMusicChordMap *chordmap,
                                             [out,retval] DirectMusicSegment** SectionSeg);

		[helpcontext(317204)]		HRESULT ComposeTransition   ([in] DirectMusicSegment* fromSeg, 
                                              [in] DirectMusicSegment* toSeg, 
                                              [in] MUSIC_TIME mtTime, 
                                              [in] long lCommand, 
                                              [in] long lFlags, 
											  [in] DirectMusicChordMap *chordmap,
                                              [out,retval]     DirectMusicSegment** SectionSeg);
 
		[helpcontext(317205)]		HRESULT ComposeTemplateFromShape ([in] short numMeasures, 
                                             [in] short shape, 
                                              [in] VARIANT_BOOL bIntro, 
                                              [in] VARIANT_BOOL bEnd, 
                                               [in] short endLength, 
                                               [out,retval]    DirectMusicSegment** TempSeg);

		[helpcontext(317206)]		HRESULT ChangeChordMap([in] DirectMusicSegment* segment,[in] VARIANT_BOOL trackScale, [in] DirectMusicChordMap* ChordMap);

	};
 



	[
		object,
		uuid(FAFA35A3-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicBand Interface"),
		pointer_default(unique),
		local,
		helpcontext(317400)
	]
	interface DirectMusicBand : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(317401)]		HRESULT CreateSegment([out,retval] DirectMusicSegment **ret);
		[helpcontext(317402)]		HRESULT Download([in] DirectMusicPerformance *performance);
		[helpcontext(317403)]		HRESULT Unload([in] DirectMusicPerformance *performance);
	};



	[
		object,
		uuid(FAFA35A4-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicStyle Interface"),
		pointer_default(unique),
		local,
		helpcontext(317600)
	]
	interface DirectMusicStyle : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(317601)]		HRESULT GetBandName([in] long index,[out,retval] BSTR *name);
		[helpcontext(317602)]		HRESULT GetBandCount([out,retval] long *count);
		[helpcontext(317603)]		HRESULT GetBand([in] BSTR name,[out,retval] DirectMusicBand **ret);
		[helpcontext(317604)]		HRESULT GetDefaultBand([out,retval] DirectMusicBand **ret);
		
		[helpcontext(317605)]		HRESULT GetMotifName([in] long index,[out,retval] BSTR *name);
		[helpcontext(317606)]		HRESULT GetMotifCount([out,retval] long *count);
		[helpcontext(317607)]		HRESULT GetMotif([in] BSTR name,[out,retval] DirectMusicSegment **ret);		
		[helpcontext(317608)]		HRESULT GetTimeSignature( [in,out] DMUS_TIMESIGNATURE* pTimeSig); 
		[helpcontext(317609)]		HRESULT GetTempo([out,retval] double *pTempo); 

	};


	[
		object,
		uuid(FAFA35A5-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicChordMap Interface"),
		pointer_default(unique),
		local,
		helpcontext(317800)
	]
	interface DirectMusicChordMap : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

	
		[hidden]		HRESULT GetScale([out,retval] long *scale);

	};

	[
		object,
		uuid(FAFA35A6-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicSegmentState Interface"),
		pointer_default(unique),
		local,
		helpcontext(318000)
	]
	interface DirectMusicSegmentState : IUnknown	
	{
	
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(318001)]		HRESULT GetRepeats([out,retval] long *repeats);
		[helpcontext(318002)]		HRESULT GetSeek([out,retval] MUSIC_TIME *seek);
		[helpcontext(318003)]		HRESULT GetStartPoint([out,retval] MUSIC_TIME *seek);
		[helpcontext(318004)]		HRESULT GetStartTime([out,retval] MUSIC_TIME *seek);
		[helpcontext(318005)]		HRESULT GetSegment([out,retval] DirectMusicSegment  **segment);
	};



	[
		object,
		uuid(FAFA35A7-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicPerformance Interface"),
		pointer_default(unique),
		local,
		helpcontext(318200)
	]
	interface DirectMusicPerformance : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(318201)]		HRESULT Init                ([in] DirectSound *DirectSound, [in] long hWnd) ;
		[helpcontext(318202)]		HRESULT CloseDown			();
		
		[helpcontext(318203)]		HRESULT PlaySegment        ([in] DirectMusicSegment* segment, 									 
                                     	[in] long lFlags, 
                                     	[in] long startTime,
									 [out,retval] DirectMusicSegmentState** segmentState);
		[helpcontext(318204)]		HRESULT Stop                ([in] DirectMusicSegment* segment, 
									 [in] DirectMusicSegmentState *segmentState,                                  
                                     	[in] MUSIC_TIME mtTime, 
                                     	[in] long lFlags) ;
		[helpcontext(318205)]		HRESULT GetSegmentState		([in] MUSIC_TIME mtTime, [out,retval] DirectMusicSegmentState **ret);
		[helpcontext(318206)]		HRESULT Invalidate			([in] MUSIC_TIME mtTime, [in] long flags);
		[helpcontext(318207)]		HRESULT IsPlaying           ([in] DirectMusicSegment* segment, [in] DirectMusicSegmentState* segmentState,[out,retval] VARIANT_BOOL *b);
		
		[helpcontext(318208)]		HRESULT AddNotificationType ([in] CONST_DMUS_NOTIFICATION_TYPE type);
		[helpcontext(318209)]		HRESULT RemoveNotificationType ([in] CONST_DMUS_NOTIFICATION_TYPE type);
		[helpcontext(318210)]		HRESULT SetNotificationHandle([in] long hnd);
		[helpcontext(318211)]		HRESULT GetNotificationPMSG  ([in,out] DMUS_NOTIFICATION_PMSG *message,[out,retval] VARIANT_BOOL *success);
		  
			
		[helpcontext(318212)]		HRESULT MusicToClockTime ([in] MUSIC_TIME mtTime,[out,retval] REFERENCE_TIME *ctTime);
		[helpcontext(318213)]		HRESULT ClockToMusicTime ([in] REFERENCE_TIME ctTime,[out,retval] MUSIC_TIME *mtTime);
		[helpcontext(318214)]		HRESULT GetMusicTime       ([out,retval]   MUSIC_TIME* ret);
		[helpcontext(318215)]		HRESULT GetClockTime   ([out,retval]   REFERENCE_TIME* ret);
		[helpcontext(318216)]		HRESULT GetPrepareTime      ([out,retval] long *lMilliSeconds);
		[helpcontext(318217)]		HRESULT GetBumperLength      ([out,retval] long *lMilliSeconds);
		[helpcontext(318218)]		HRESULT GetLatencyTime      ([out,retval] REFERENCE_TIME *ctTime);
		[helpcontext(318219)]		HRESULT GetQueueTime		([out,retval] REFERENCE_TIME *ctTime);
		[helpcontext(318220)]		HRESULT GetResolvedTime		([in] REFERENCE_TIME ctTime, [in] long flags, [out,retval] REFERENCE_TIME *ret);
		[helpcontext(318221)]		HRESULT SetPrepareTime      ([in] long  lMilliSeconds);
		[helpcontext(318222)]		HRESULT SetBumperLength      ([in] long lMilliSeconds) ;		
		[helpcontext(318223)]		HRESULT AdjustTime			([in] long tAmount);
	
		


		//global params
		[helpcontext(318224)]		HRESULT SetMasterAutoDownload     ([in] VARIANT_BOOL b);
		[helpcontext(318225)]		HRESULT GetMasterAutoDownload      ([out,retval] VARIANT_BOOL *b);
		[helpcontext(318226)]		HRESULT SetMasterTempo 	    ([in] float tempo);
		[helpcontext(318227)]		HRESULT GetMasterTempo      ([out,retval] float *tempo);
		[helpcontext(318228)]		HRESULT SetMasterVolume     ([in] long vol);
		[helpcontext(318229)]		HRESULT GetMasterVolume      ([out,retval] long *v);
		[helpcontext(318230)]		HRESULT SetMasterGrooveLevel ([in] short level);
		[helpcontext(318231)]		HRESULT GetMasterGrooveLevel ([out,retval] short *level);

		[helpcontext(318232)]		HRESULT Reset([in] long resetflags );
		[helpcontext(318233)]		HRESULT GetStyle([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] DirectMusicStyle **ret);
		[helpcontext(318234)]		HRESULT GetChordMap([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] DirectMusicChordMap **ret);		
		[helpcontext(318235)]		HRESULT GetCommand([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] Byte *command) ;
		[helpcontext(318236)]		HRESULT GetGrooveLevel([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] Byte *level) ;
		[helpcontext(318237)]		HRESULT GetTempo([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] double *tempo) ;
		[helpcontext(318238)]		HRESULT GetTimeSig([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[in,out] DMUS_TIMESIGNATURE *timeSig) ;

		[helpcontext(318239)]		HRESULT SendNotePMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] DMUS_NOTE_PMSG *msg);

		
		[helpcontext(318240)]		HRESULT SendCurvePMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] DMUS_CURVE_PMSG *msg);
									

		[helpcontext(318241)]		HRESULT SendMIDIPMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] Byte status,
											[in] Byte byte1,
											[in] Byte byte2);

		[helpcontext(318242)]		HRESULT SendPatchPMSG([in] MUSIC_TIME lTime,
									 		[in] long flags,
											[in] long channel,
											[in] Byte instrument,
											[in] Byte byte1,
											[in] Byte byte2);
		[helpcontext(318243)]		HRESULT SendTempoPMSG([in] MUSIC_TIME lTime,
											[in] long flags,
									//		[in] long channel,
											[in] double tempo);

		[helpcontext(318244)]		HRESULT SendTransposePMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] short transpose);

		[helpcontext(318245)]		HRESULT SendTimeSigPMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] DMUS_TIMESIGNATURE *timesig);

		[helpcontext(318246)]		HRESULT GetPortName([in] long index,[out,retval] BSTR *name);
		[helpcontext(318247)]		HRESULT GetPortCount([out,retval] long *c);
		[helpcontext(318248)]		HRESULT GetPortCaps([in] long index,[in,out] DMUS_PORTCAPS  *caps);
		[helpcontext(318249)]		HRESULT SetPort([in] long index,[in] long numGroups);

	};

	
	[
		object,
		uuid(FAFA35A8-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectMusicCollection Interface"),
		pointer_default(unique),
		local,
		helpcontext(318400)
	]
	interface DirectMusicCollection : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

	};

///////////////////////////////////////////////////////////////////////////
// 
// Other
// 
///////////////////////////////////////////////////////////////////////////


	[
		object,
		uuid(FAFA35B0-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("DirectXEvent Interface"),
		pointer_default(unique),
		oleautomation,
		helpcontext(318600)
	]
	interface DirectXEvent : IUnknown	
	{
		[helpcontext(318601)]		HRESULT DXCallback([in] long eventid);
	};

#if FALSE
	[
		object,
		uuid(FAFA35B1-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("WebObject Interface"),
		pointer_default(unique),
		oleautomation,
		hidden,
		helpcontext(318800)
	]	
	interface DirectWeb : IUnknown
	{

		[helpcontext(318801)]		HRESULT LoadPage([in]BSTR page,[in]int w, [in]int h);
		[helpcontext(318802)]		HRESULT DrawToDC([in]long hdc,[in]int w, [in]int h);
		[helpcontext(318803)]		HRESULT GetReadyState([out,retval]BSTR *ret);
		[helpcontext(318804)]		HRESULT GetHeight([in]int *height);
		[helpcontext(318805)]		HRESULT GetWidth([in]int *width);
		[helpcontext(318806)]		HRESULT Click([in] int x, [in] int y);

	
	};
#endif


	[
		object,
	      uuid(FAFA3599-8B72-11d2-90B2-00C04FC2C602), 
		helpstring("DirectX7 root object functions"),
		pointer_default(unique),
		helpcontext(319000)

	]
	interface IDirectX7 : IUnknown	
	{
		import "oaidl.idl";
		
		[helpcontext(319001)]		HRESULT Direct3DRMCreate([out,retval] Direct3dRM3 **ret);		
		[helpcontext(319002)]		HRESULT DirectDrawCreate([in] BSTR guid, [out,retval] DirectDraw7 **ret);		
		[helpcontext(319003)]		HRESULT GetDDEnum([out,retval] DirectDrawEnum **ret);
		[helpcontext(319004)]		HRESULT DirectSoundCreate([in] BSTR guid, [out,retval] DirectSound **ret);
		[helpcontext(319005)]		HRESULT DirectSoundCaptureCreate([in] BSTR guid, [out,retval] DirectSoundCapture **ret);
		[helpcontext(319006)]		HRESULT GetDSEnum([out,retval] DirectSoundEnum **retVal);
		[helpcontext(319007)]		HRESULT GetDSCaptureEnum([out,retval] DirectSoundEnum **retVal);		
        	[helpcontext(319008)]		HRESULT DirectInputCreate([out,retval]DirectInput **ret);
		[helpcontext(319009)]		HRESULT DirectPlayCreate([in] BSTR guid, [out,retval] DirectPlay4 **ret);
		[helpcontext(319010)]		HRESULT DirectPlayLobbyCreate([out,retval] DirectPlayLobby3 **ret);
		[hidden]		HRESULT GetDPEnum([out,retval]DirectPlayEnumServiceProviders **retval);
	
		[helpcontext(319011)]		HRESULT ColorGetAlpha([in] long color,[out,retval] float *ret);
		[helpcontext(319012)]		HRESULT ColorGetBlue([in] long color,[out,retval] float *ret);
		[helpcontext(319013)]		HRESULT ColorGetGreen([in] long color,[out,retval] float *ret);
		[helpcontext(319014)]		HRESULT ColorGetRed([in] long color,[out,retval] float *ret);
		[helpcontext(319015)]		HRESULT CreateColorRGB([in] float r,[in] float g,[in] float b,[out,retval]long *color);
		[helpcontext(319016)]		HRESULT CreateColorRGBA([in] float r,[in] float g,[in] float b,[in] float a,[out,retval]long *color);
		[helpcontext(319017)]		HRESULT MatrixFromQuaternion([out] D3DMatrix *matrix, [in]  D3DRMQUATERNION *quat);
		[helpcontext(319018)]		HRESULT QuaternionRotation([out]   D3DRMQUATERNION *quat,[in]D3DVECTOR *axis, [in]float theta);
		[helpcontext(319019)]		HRESULT QuaternionMultiply([out]   D3DRMQUATERNION *quat,[in]   D3DRMQUATERNION *quatA,[in]   D3DRMQUATERNION *quatB);
		[helpcontext(319020)]		HRESULT QuaternionSlerp([out]   D3DRMQUATERNION *quat,[in]   D3DRMQUATERNION *quatA,[in]   D3DRMQUATERNION *quatB, [in] float alpha);
		[helpcontext(319021)]		HRESULT VectorAdd([out] D3DVECTOR *v,[in]D3DVECTOR *vA,[in]D3DVECTOR *vB);
		[helpcontext(319022)]		HRESULT VectorCrossProduct([out] D3DVECTOR *v,[in]D3DVECTOR *vA,[in]D3DVECTOR *vB);
		[helpcontext(319023)]		HRESULT VectorDotProduct([in]D3DVECTOR *vA,[in]D3DVECTOR *vB,[out,retval] float *ret);
		[helpcontext(319024)]		HRESULT VectorModulus([in]D3DVECTOR *vA,[out,retval] float *ret);
		[helpcontext(319025)]		HRESULT VectorNormalize([in,out] D3DVECTOR *v);
		[helpcontext(319026)]		HRESULT VectorRandom([in,out] D3DVECTOR *v);
		[helpcontext(319027)]		HRESULT VectorReflect([out] D3DVECTOR *vDest,[in]D3DVECTOR *vRay,[in]D3DVECTOR *vNormal);
		[helpcontext(319028)]		HRESULT VectorRotate([out] D3DVECTOR *vDest,[in]D3DVECTOR *vA,[in]D3DVECTOR *vAxis,[in] float theta);
		[helpcontext(319029)]		HRESULT VectorScale([out] D3DVECTOR *vDest,[in]D3DVECTOR *vA,[in] float factor);
		[helpcontext(319030)]		HRESULT VectorSubtract([out] D3DVECTOR *v,[in]D3DVECTOR *vA,[in]D3DVECTOR *vB);
		[helpcontext(319031)]		HRESULT VectorCopy([in,out] D3DVECTOR *vDest, [in] D3DVECTOR *vSrc);
		
		[helpcontext(319032)]		HRESULT RotateXMatrix([in,out] D3DMATRIX *mDest,[in] float radians);
		[helpcontext(319033)]		HRESULT RotateYMatrix([in,out] D3DMATRIX *mDest,[in] float radians);
		[helpcontext(319034)]		HRESULT RotateZMatrix([in,out] D3DMATRIX *mDest,[in] float radians);
		[helpcontext(319035)]		HRESULT ViewMatrix([in,out] D3DMATRIX *mDest,[in] D3DVECTOR *vFrom, [in] D3DVECTOR *vTo, [in] D3DVECTOR *vUp, [in] float roll);
		[helpcontext(319036)]		HRESULT MatrixMultiply([in,out]D3DMATRIX *mDest,[in] D3DMATRIX *mA,[in] D3DMATRIX *mB);
		[helpcontext(319037)]		HRESULT ProjectionMatrix([in,out]D3DMATRIX *mDest,[in] float nearPlane, [in] float farplane, [in] float fov);
		[helpcontext(319038)]		HRESULT CopyMatrix([in,out]D3DMATRIX *mDest,[in] D3DMATRIX * mSrc);
		[helpcontext(319039)]		HRESULT IdentityMatrix([in,out]D3DMATRIX *mDest);
		[helpcontext(319040)]		HRESULT ZeroMatrix([in,out]D3DMATRIX *mDest);
		
 		[helpcontext(319041)]		HRESULT TickCount([out,retval] long *retv);
		[helpcontext(319042)]		HRESULT SystemBpp([out, retval] long *retv);  

		[helpcontext(319043)]		HRESULT DirectMusicLoaderCreate([out,retval] DirectMusicLoader **ret);
		[helpcontext(319044)]		HRESULT DirectMusicComposerCreate([out,retval] DirectMusicComposer **ret);
		[helpcontext(319045)]		HRESULT DirectMusicPerformanceCreate([out,retval] DirectMusicPerformance **ret);

		[helpcontext(319046)]		HRESULT GetWindowRect([in] long hwnd, [in,out] RECT *r);
		[helpcontext(319047)]		HRESULT CreateEvent([in] DirectXEvent *event,[out,retval] long *h);
		[helpcontext(319048)]		HRESULT SetEvent([in] long eventId);
		[helpcontext(319049)]		HRESULT DestroyEvent([in] long eventId);
		[helpcontext(319050)]		HRESULT CreateD3DVertex([in]float x, [in]float y, [in]float z, [in]float nx, [in]float ny, [in]float nz, [in]float tu, [in]float tv, [in,out] D3dVertex *v);
		[helpcontext(319051)]		HRESULT CreateD3DLVertex([in]float x, [in]float y, [in]float z,[in] long color, [in] long specular, [in] float tu, [in] float tv, [in,out] D3dLVertex *v);
		[helpcontext(319052)]		HRESULT CreateD3DTLVertex([in]float sx,[in] float sy,[in] float sz, [in]float rhw, [in]long color, [in]long  specular, [in]float tu, [in]float tv,  [in,out] D3dTLVertex *v);
		[helpcontext(319053)]		HRESULT DirectDraw4Create([in] BSTR guid,[out,retval] DirectDraw4 **ret);
		
		//needs to be added to master help ids
		[helpcontext(319054)]		HRESULT CreateNewGuid([out,retval] BSTR *retGuid);
	};



	///////////////////////////////////////////////////////////////////////////
	
	[
		object,
		uuid(BCAA7DA2-F7EF-11d2-93FD-00C04FC2C602),		
		helpstring("IDirectDraw4 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305600)
	]
	interface DirectDraw4 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
     	[helpcontext(305601)]		HRESULT CreateClipper([in] long flags, [out, retval] DirectDrawClipper **val);
		[helpcontext(305602)]		HRESULT CreatePalette([in] DDPCapsFlags flags, [in] SAFEARRAY(APAL) *pe, [out, retval] DirectDrawPalette **val);
		[helpcontext(305603)]		HRESULT CreateSurface([in] DDSURFACEDESC2 *dd, [out, retval] DirectDrawSurface4 **retv);
		[helpcontext(305604)]		HRESULT CreateSurfaceFromFile([in] BSTR file, [in,out] DDSURFACEDESC2 *dd, [out, retval] DirectDrawSurface4 **retv);
		[helpcontext(305605)]		HRESULT CreateSurfaceFromResource([in] BSTR file, [in] BSTR resName, [in,out] DDSURFACEDESC2 *ddsd, [out, retval] DirectDrawSurface4 **retv);					
		[helpcontext(305606)]		HRESULT DuplicateSurface([in] DirectDrawSurface4 *ddIn,[out, retval] DirectDrawSurface4 **ddOut);		
		[helpcontext(305607)]		HRESULT FlipToGDISurface();		
		[helpcontext(305608)]		HRESULT GetAvailableTotalMem([in] DDSCAPS2 *ddsCaps, [out, retval] long *m);
		[helpcontext(305609)]		HRESULT GetCaps([in,out] DDCAPS *hwCaps,  [in,out] DDCAPS *helCaps);
		[helpcontext(305611)]		HRESULT GetDisplayMode( [in,out] DDSURFACEDESC2 *surface);
		[helpcontext(305612)]		HRESULT GetDisplayModesEnum([in] DDEDMFlags flags,[in] DDSURFACEDESC2 *ddsd,[out,retval] DirectDrawEnumModes **retval);
		[helpcontext(305613)]		HRESULT GetFourCCCodes( [in,out] SAFEARRAY(long) *ccCodes);
		[helpcontext(305614)]		HRESULT GetFreeMem( [in] DDSCAPS2 *ddsCaps, [out, retval] long *m);
		[helpcontext(305615)]		HRESULT GetGDISurface( [out, retval] DirectDrawSurface4 **s);
		[helpcontext(305616)]		HRESULT GetMonitorFrequency([out, retval] long *freq);
		[helpcontext(305617)]		HRESULT GetNumFourCCCodes([out, retval] long *nCodes);
		[helpcontext(305618)]		HRESULT GetScanLine([in,out] long *lines, [out, retval] long *status);		
		[helpcontext(305619)]		HRESULT GetSurfaceFromDC([in] long hdc,[out,retval] DirectDrawSurface4 **retv);
		[helpcontext(305621)]		HRESULT GetVerticalBlankStatus([out, retval] long *status);
		[helpcontext(305622)]		HRESULT LoadPaletteFromBitmap([in] BSTR bName, [out, retval] DirectDrawPalette **retv);
		[helpcontext(305623)]		HRESULT RestoreAllSurfaces();		
		[helpcontext(305624)]		HRESULT RestoreDisplayMode();
		[helpcontext(305625)]		HRESULT SetCooperativeLevel([in] HWnd hdl, [in] DDSCLFlags flags);
		[helpcontext(305626)]		HRESULT SetDisplayMode([in] long w, [in] long h, [in] long bpp, [in] long ref,[in] DDSDMFlags mode);
		[helpcontext(305627)]		HRESULT TestCooperativeLevel([out,retval] long *status);
		[helpcontext(305628)]		HRESULT WaitForVerticalBlank([in] DDWaitVBFlags flags, [in] long handle, [out, retval] long *status);


	};


	[ 
		object,
		uuid(BCAA7DA3-F7EF-11d2-93FD-00C04FC2C602),		
		helpstring("DirectDrawSurface4 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305800)
	]
	interface DirectDrawSurface4 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);				
				
		[helpcontext(305801)]		HRESULT AddAttachedSurface( [in] DirectDrawSurface4 *ddS);				
	    [helpcontext(305802)]		HRESULT Blt( [in] RECT *destRect, [in] DirectDrawSurface4 *ddS, [in] RECT *srcRect, [in] DDBltFlags flags, [out, retval] long *status);
		[helpcontext(305803)]		HRESULT BltColorFill( [in] RECT *destRect, [in] long fillvalue, [out, retval] long *status );
		[helpcontext(305804)]		HRESULT BltFast( [in] long dx, [in] long dy, [in] DirectDrawSurface4 *dds, [in] RECT *srcRect, [in] DDBltFastFlags trans, [out, retval] long *status);		
		[helpcontext(305805)]		HRESULT BltFx( [in] RECT *destRect, [in] DirectDrawSurface4 *ddS, [in] RECT *srcRect, [in] DDBltFlags flags, [in] DDBLTFX *bltfx, [out, retval] long *status );
		[helpcontext(305806)]		HRESULT BltToDC([in] long hdc, [in] RECT *srcRect, [in] RECT *destRect);	
		[helpcontext(305807)]		HRESULT ChangeUniquenessValue();		
		[helpcontext(305808)]		HRESULT DeleteAttachedSurface( [in] DirectDrawSurface4 *dds) ;
		[helpcontext(305809)]		HRESULT DrawBox([in] long x1, [in] long y1, [in] long x2, [in] long y2);
		[helpcontext(305810)]		HRESULT DrawCircle([in] long x1, [in] long y1, [in] long r);
		[helpcontext(305811)]		HRESULT DrawEllipse([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305812)]		HRESULT DrawLine([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305813)]		HRESULT DrawRoundedBox([in] long x1, [in] long y1, [in] long x2, [in] long y2,[in] long rw, [in] long rh);		
		[helpcontext(305814)]		HRESULT DrawText([in] long x, [in] long y,  [in] BSTR text, [in] VARIANT_BOOL b);
		[helpcontext(305815)]		HRESULT Flip( [in] DirectDrawSurface4 *dds, [in] DDFlipFlags flags);		
		[helpcontext(305816)]		HRESULT GetAttachedSurface( [in] DDSCaps2 *caps, [out, retval] DirectDrawSurface4 **dds);
		[helpcontext(305818)]		HRESULT GetBltStatus([in] DDGFSFlags flags, [out, retval] long *status);
		[helpcontext(305819)]		HRESULT GetCaps( [in,out] DDSCAPS2  *caps);
		[helpcontext(305820)]		HRESULT GetClipper( [out, retval] DirectDrawClipper **val);
		[helpcontext(305821)]		HRESULT GetColorKey( [in] long flags, [in,out] DDCOLORKEY *val);
		[helpcontext(305822)]		HRESULT GetDC( [out, retval] long *hdc);
		[helpcontext(305823)]		HRESULT GetDirectDraw( [out, retval] DirectDraw4 **val);			
		[helpcontext(305826)]		HRESULT	getDrawStyle([out,retval] long *drawStyle);		
		[helpcontext(305827)]		HRESULT	getDrawWidth([out,retval] long *drawWidth);		
		[helpcontext(305828)]		HRESULT GetFillColor([out,retval] long *color);		
		[helpcontext(305829)]		HRESULT GetFillStyle([out,retval] long *fillStyle);		
		[helpcontext(305830)]		HRESULT GetFlipStatus( [in] DDGfsFlags flags, [out, retval] long *status);		
		[helpcontext(305831)]		HRESULT GetFontTransparency([out,retval] VARIANT_BOOL *b);		
		[helpcontext(305832)]		HRESULT GetForeColor([out,retval] long *color);						
		[helpcontext(305833)]		HRESULT GetLockedPixel([in] int x, [in] int y, [out,retval] long *col);
		[helpcontext(305835)]		HRESULT GetPalette( [out, retval] DirectDrawPalette **val);
		[helpcontext(305836)]		HRESULT GetPixelFormat( [in,out] DDPIXELFORMAT *pf);		
		[helpcontext(305837)]		HRESULT GetSurfaceDesc([in,out] DDSURFACEDESC2 *surface);		
		[helpcontext(305838)]		HRESULT GetUniquenessValue([out,retval] long *retVal);
		[helpcontext(305839)]		HRESULT	isLost([out, retval] long *status);
        [helpcontext(305840)]		HRESULT Lock( [in] RECT *r, [in] DDSURFACEDESC2 *desc, [in] ddLockFlags flags, [in] Handle hnd);
		[helpcontext(305841)]		HRESULT ReleaseDC([in] long hdc);		
		[helpcontext(305842)]		HRESULT	restore();
		[helpcontext(305843)]		HRESULT SetClipper( [in] DirectDrawClipper *val) ;
		[helpcontext(305844)]		HRESULT SetColorKey( [in] DDCKeyFlags flags, [in] DDCOLORKEY *val);
		[helpcontext(305845)]		HRESULT	setDrawStyle([in] long drawStyle);
		[helpcontext(305846)]		HRESULT	setDrawWidth([in] long drawWidth);
		[helpcontext(305847)]		HRESULT SetFillColor([in] long color);
		[helpcontext(305848)]		HRESULT SetFillStyle([in] long fillStyle);
		[helpcontext(305849)]		HRESULT SetFont([in] IFont *font);		
		[helpcontext(305850)]		HRESULT SetFontTransparency([in] VARIANT_BOOL b);
		[helpcontext(305851)]		HRESULT SetForeColor([in] long color);
		[helpcontext(305852)]		HRESULT SetLockedPixel([in] int x, [in] int y, [in] long col);				
		[helpcontext(305854)]		HRESULT SetPalette([in] DirectDrawPalette *ddp);		
       	[helpcontext(305855)]		HRESULT Unlock( [in] RECT *r);			
		[helpcontext(305860)]		HRESULT GetLockedArray([in] SAFEARRAY(byte) *array);
	
		[helpcontext(305868)]		HRESULT SetFontBackColor([in] long color);
		[helpcontext(305869)]		HRESULT GetFontBackColor([out,retval] long *color);


	};



	[
		object,
		uuid(BCAA7DA4-F7EF-11d2-93FD-00C04FC2C602),		
		helpstring("DirectDrawIdentifier Interface"),
		pointer_default(unique),
		local,
		helpcontext(319600)
	]
	interface  DirectDrawIdentifier : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(319601)]		HRESULT GetDriver([out,retval] BSTR *ret);
		[helpcontext(319602)]		HRESULT GetDescription([out,retval] BSTR *ret);
		[helpcontext(319603)]		HRESULT GetDriverVersion([out,retval] long *ret);
		[helpcontext(319604)]		HRESULT GetDriverSubVersion([out,retval] long *ret);
		[helpcontext(319605)]		HRESULT GetVendorId([out,retval] long *ret);
		[helpcontext(319606)]		HRESULT GetDeviceId([out,retval] long *ret);
		[helpcontext(319607)]		HRESULT GetSubSysId([out,retval] long *ret);
		[helpcontext(319608)]		HRESULT GetRevision([out,retval] long *ret);
		[helpcontext(319609)]		HRESULT GetDeviceIndentifier([out,retval] BSTR *ret);
		[helpcontext(319610)]		HRESULT GetWHQLLevel([out,retval] long *ret);

	};





		
	///////////////////////////////////////////////////////////////////////////
	importlib("stdole2.tlb");


	
	[
		uuid(E1211353-8E94-11d1-8808-00C04FC2C602),
 		helpstring("DirectX7"),
		helpcontext(319800)
	]
	  coclass DirectX7 { [default] interface IDirectX7; };
	




};