/*** Autogenerated by WIDL 9.8 from include/documenttarget.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __documenttarget_h__
#define __documenttarget_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef __IPrintDocumentPackageTarget_FWD_DEFINED__
#define __IPrintDocumentPackageTarget_FWD_DEFINED__
typedef interface IPrintDocumentPackageTarget IPrintDocumentPackageTarget;
#ifdef __cplusplus
interface IPrintDocumentPackageTarget;
#endif /* __cplusplus */
#endif

#ifndef __IPrintDocumentPackageStatusEvent_FWD_DEFINED__
#define __IPrintDocumentPackageStatusEvent_FWD_DEFINED__
typedef interface IPrintDocumentPackageStatusEvent IPrintDocumentPackageStatusEvent;
#ifdef __cplusplus
interface IPrintDocumentPackageStatusEvent;
#endif /* __cplusplus */
#endif

#ifndef __IPrintDocumentPackageTargetFactory_FWD_DEFINED__
#define __IPrintDocumentPackageTargetFactory_FWD_DEFINED__
typedef interface IPrintDocumentPackageTargetFactory IPrintDocumentPackageTargetFactory;
#ifdef __cplusplus
interface IPrintDocumentPackageTargetFactory;
#endif /* __cplusplus */
#endif

#ifndef __PrintDocumentPackageTarget_FWD_DEFINED__
#define __PrintDocumentPackageTarget_FWD_DEFINED__
#ifdef __cplusplus
typedef class PrintDocumentPackageTarget PrintDocumentPackageTarget;
#else
typedef struct PrintDocumentPackageTarget PrintDocumentPackageTarget;
#endif /* defined __cplusplus */
#endif /* defined __PrintDocumentPackageTarget_FWD_DEFINED__ */

#ifndef __PrintDocumentPackageTargetFactory_FWD_DEFINED__
#define __PrintDocumentPackageTargetFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class PrintDocumentPackageTargetFactory PrintDocumentPackageTargetFactory;
#else
typedef struct PrintDocumentPackageTargetFactory PrintDocumentPackageTargetFactory;
#endif /* defined __cplusplus */
#endif /* defined __PrintDocumentPackageTargetFactory_FWD_DEFINED__ */

/* Headers for imported files */

#include <oaidl.h>
#include <ocidl.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */

#include <winapifamily.h>

DEFINE_GUID (ID_DOCUMENTPACKAGETARGET_MSXPS, 0x9cae40a8, 0xded1, 0x41c9, 0xa9, 0xfd, 0xd7, 0x35, 0xef, 0x33, 0xae, 0xda);
DEFINE_GUID (ID_DOCUMENTPACKAGETARGET_OPENXPS, 0x0056bb72, 0x8c9c, 0x4612, 0xbd, 0x0f, 0x93, 0x01, 0x2a, 0x87, 0x09, 0x9d);

#if NTDDI_VERSION >= 0x06010000
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
/*****************************************************************************
 * IPrintDocumentPackageTarget interface
 */
#ifndef __IPrintDocumentPackageTarget_INTERFACE_DEFINED__
#define __IPrintDocumentPackageTarget_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPrintDocumentPackageTarget, 0x1b8efec4, 0x3019, 0x4c27, 0x96,0x4e, 0x36,0x72,0x02,0x15,0x69,0x06);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1b8efec4-3019-4c27-964e-367202156906")
IPrintDocumentPackageTarget : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPackageTargetTypes(
        UINT32 *targetCount,
        GUID **targetTypes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPackageTarget(
        REFGUID guidTargetType,
        REFIID riid,
        void **ppvTarget) = 0;

    virtual HRESULT STDMETHODCALLTYPE Cancel(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPrintDocumentPackageTarget, 0x1b8efec4, 0x3019, 0x4c27, 0x96,0x4e, 0x36,0x72,0x02,0x15,0x69,0x06)
#endif
#else
typedef struct IPrintDocumentPackageTargetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPrintDocumentPackageTarget *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPrintDocumentPackageTarget *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPrintDocumentPackageTarget *This);

    /*** IPrintDocumentPackageTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPackageTargetTypes)(
        IPrintDocumentPackageTarget *This,
        UINT32 *targetCount,
        GUID **targetTypes);

    HRESULT (STDMETHODCALLTYPE *GetPackageTarget)(
        IPrintDocumentPackageTarget *This,
        REFGUID guidTargetType,
        REFIID riid,
        void **ppvTarget);

    HRESULT (STDMETHODCALLTYPE *Cancel)(
        IPrintDocumentPackageTarget *This);

    END_INTERFACE
} IPrintDocumentPackageTargetVtbl;

interface IPrintDocumentPackageTarget {
    CONST_VTBL IPrintDocumentPackageTargetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPrintDocumentPackageTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPrintDocumentPackageTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPrintDocumentPackageTarget_Release(This) (This)->lpVtbl->Release(This)
/*** IPrintDocumentPackageTarget methods ***/
#define IPrintDocumentPackageTarget_GetPackageTargetTypes(This,targetCount,targetTypes) (This)->lpVtbl->GetPackageTargetTypes(This,targetCount,targetTypes)
#define IPrintDocumentPackageTarget_GetPackageTarget(This,guidTargetType,riid,ppvTarget) (This)->lpVtbl->GetPackageTarget(This,guidTargetType,riid,ppvTarget)
#define IPrintDocumentPackageTarget_Cancel(This) (This)->lpVtbl->Cancel(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageTarget_QueryInterface(IPrintDocumentPackageTarget* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IPrintDocumentPackageTarget_AddRef(IPrintDocumentPackageTarget* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IPrintDocumentPackageTarget_Release(IPrintDocumentPackageTarget* This) {
    return This->lpVtbl->Release(This);
}
/*** IPrintDocumentPackageTarget methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageTarget_GetPackageTargetTypes(IPrintDocumentPackageTarget* This,UINT32 *targetCount,GUID **targetTypes) {
    return This->lpVtbl->GetPackageTargetTypes(This,targetCount,targetTypes);
}
static __WIDL_INLINE HRESULT IPrintDocumentPackageTarget_GetPackageTarget(IPrintDocumentPackageTarget* This,REFGUID guidTargetType,REFIID riid,void **ppvTarget) {
    return This->lpVtbl->GetPackageTarget(This,guidTargetType,riid,ppvTarget);
}
static __WIDL_INLINE HRESULT IPrintDocumentPackageTarget_Cancel(IPrintDocumentPackageTarget* This) {
    return This->lpVtbl->Cancel(This);
}
#endif
#endif

#endif


#endif  /* __IPrintDocumentPackageTarget_INTERFACE_DEFINED__ */

#endif

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
typedef enum PrintDocumentPackageCompletion {
    PrintDocumentPackageCompletion_InProgress = 0,
    PrintDocumentPackageCompletion_Completed = 1,
    PrintDocumentPackageCompletion_Canceled = 2,
    PrintDocumentPackageCompletion_Failed = 3
} PrintDocumentPackageCompletion;
typedef struct __WIDL_documenttarget_generated_name_00000020 {
    UINT32 JobId;
    INT32 CurrentDocument;
    INT32 CurrentPage;
    INT32 CurrentPageTotal;
    PrintDocumentPackageCompletion Completion;
    HRESULT PackageStatus;
} PrintDocumentPackageStatus;
/*****************************************************************************
 * IPrintDocumentPackageStatusEvent interface
 */
#ifndef __IPrintDocumentPackageStatusEvent_INTERFACE_DEFINED__
#define __IPrintDocumentPackageStatusEvent_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPrintDocumentPackageStatusEvent, 0xed90c8ad, 0x5c34, 0x4d05, 0xa1,0xec, 0x0e,0x8a,0x9b,0x3a,0xd7,0xaf);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ed90c8ad-5c34-4d05-a1ec-0e8a9b3ad7af")
IPrintDocumentPackageStatusEvent : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE PackageStatusUpdated(
        PrintDocumentPackageStatus *packageStatus) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPrintDocumentPackageStatusEvent, 0xed90c8ad, 0x5c34, 0x4d05, 0xa1,0xec, 0x0e,0x8a,0x9b,0x3a,0xd7,0xaf)
#endif
#else
typedef struct IPrintDocumentPackageStatusEventVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPrintDocumentPackageStatusEvent *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPrintDocumentPackageStatusEvent *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPrintDocumentPackageStatusEvent *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        IPrintDocumentPackageStatusEvent *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        IPrintDocumentPackageStatusEvent *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        IPrintDocumentPackageStatusEvent *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        IPrintDocumentPackageStatusEvent *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** IPrintDocumentPackageStatusEvent methods ***/
    HRESULT (STDMETHODCALLTYPE *PackageStatusUpdated)(
        IPrintDocumentPackageStatusEvent *This,
        PrintDocumentPackageStatus *packageStatus);

    END_INTERFACE
} IPrintDocumentPackageStatusEventVtbl;

interface IPrintDocumentPackageStatusEvent {
    CONST_VTBL IPrintDocumentPackageStatusEventVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPrintDocumentPackageStatusEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPrintDocumentPackageStatusEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPrintDocumentPackageStatusEvent_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define IPrintDocumentPackageStatusEvent_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IPrintDocumentPackageStatusEvent_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IPrintDocumentPackageStatusEvent_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IPrintDocumentPackageStatusEvent_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** IPrintDocumentPackageStatusEvent methods ***/
#define IPrintDocumentPackageStatusEvent_PackageStatusUpdated(This,packageStatus) (This)->lpVtbl->PackageStatusUpdated(This,packageStatus)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageStatusEvent_QueryInterface(IPrintDocumentPackageStatusEvent* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IPrintDocumentPackageStatusEvent_AddRef(IPrintDocumentPackageStatusEvent* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IPrintDocumentPackageStatusEvent_Release(IPrintDocumentPackageStatusEvent* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageStatusEvent_GetTypeInfoCount(IPrintDocumentPackageStatusEvent* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static __WIDL_INLINE HRESULT IPrintDocumentPackageStatusEvent_GetTypeInfo(IPrintDocumentPackageStatusEvent* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static __WIDL_INLINE HRESULT IPrintDocumentPackageStatusEvent_GetIDsOfNames(IPrintDocumentPackageStatusEvent* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static __WIDL_INLINE HRESULT IPrintDocumentPackageStatusEvent_Invoke(IPrintDocumentPackageStatusEvent* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** IPrintDocumentPackageStatusEvent methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageStatusEvent_PackageStatusUpdated(IPrintDocumentPackageStatusEvent* This,PrintDocumentPackageStatus *packageStatus) {
    return This->lpVtbl->PackageStatusUpdated(This,packageStatus);
}
#endif
#endif

#endif


#endif  /* __IPrintDocumentPackageStatusEvent_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPrintDocumentPackageTargetFactory interface
 */
#ifndef __IPrintDocumentPackageTargetFactory_INTERFACE_DEFINED__
#define __IPrintDocumentPackageTargetFactory_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPrintDocumentPackageTargetFactory, 0xd2959bf7, 0xb31b, 0x4a3d, 0x96,0x00, 0x71,0x2e,0xb1,0x33,0x5b,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d2959bf7-b31b-4a3d-9600-712eb1335ba4")
IPrintDocumentPackageTargetFactory : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateDocumentPackageTargetForPrintJob(
        LPCWSTR printerName,
        LPCWSTR jobName,
        IStream *jobOutputStream,
        IStream *jobPrintTicketStream,
        IPrintDocumentPackageTarget **docPackageTarget) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPrintDocumentPackageTargetFactory, 0xd2959bf7, 0xb31b, 0x4a3d, 0x96,0x00, 0x71,0x2e,0xb1,0x33,0x5b,0xa4)
#endif
#else
typedef struct IPrintDocumentPackageTargetFactoryVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPrintDocumentPackageTargetFactory *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPrintDocumentPackageTargetFactory *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPrintDocumentPackageTargetFactory *This);

    /*** IPrintDocumentPackageTargetFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDocumentPackageTargetForPrintJob)(
        IPrintDocumentPackageTargetFactory *This,
        LPCWSTR printerName,
        LPCWSTR jobName,
        IStream *jobOutputStream,
        IStream *jobPrintTicketStream,
        IPrintDocumentPackageTarget **docPackageTarget);

    END_INTERFACE
} IPrintDocumentPackageTargetFactoryVtbl;

interface IPrintDocumentPackageTargetFactory {
    CONST_VTBL IPrintDocumentPackageTargetFactoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IPrintDocumentPackageTargetFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPrintDocumentPackageTargetFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPrintDocumentPackageTargetFactory_Release(This) (This)->lpVtbl->Release(This)
/*** IPrintDocumentPackageTargetFactory methods ***/
#define IPrintDocumentPackageTargetFactory_CreateDocumentPackageTargetForPrintJob(This,printerName,jobName,jobOutputStream,jobPrintTicketStream,docPackageTarget) (This)->lpVtbl->CreateDocumentPackageTargetForPrintJob(This,printerName,jobName,jobOutputStream,jobPrintTicketStream,docPackageTarget)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageTargetFactory_QueryInterface(IPrintDocumentPackageTargetFactory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IPrintDocumentPackageTargetFactory_AddRef(IPrintDocumentPackageTargetFactory* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IPrintDocumentPackageTargetFactory_Release(IPrintDocumentPackageTargetFactory* This) {
    return This->lpVtbl->Release(This);
}
/*** IPrintDocumentPackageTargetFactory methods ***/
static __WIDL_INLINE HRESULT IPrintDocumentPackageTargetFactory_CreateDocumentPackageTargetForPrintJob(IPrintDocumentPackageTargetFactory* This,LPCWSTR printerName,LPCWSTR jobName,IStream *jobOutputStream,IStream *jobPrintTicketStream,IPrintDocumentPackageTarget **docPackageTarget) {
    return This->lpVtbl->CreateDocumentPackageTargetForPrintJob(This,printerName,jobName,jobOutputStream,jobPrintTicketStream,docPackageTarget);
}
#endif
#endif

#endif


#endif  /* __IPrintDocumentPackageTargetFactory_INTERFACE_DEFINED__ */

#endif
#ifndef __PrintDocumentTargetLib_LIBRARY_DEFINED__
#define __PrintDocumentTargetLib_LIBRARY_DEFINED__

DEFINE_GUID(LIBID_PrintDocumentTargetLib, 0x410d76f7, 0x8bb5, 0x4a7d, 0x9d,0x37, 0x9c,0x71,0xb1,0xb1,0x4d,0x14);

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#ifndef __IPrintDocumentPackageTarget_FWD_DEFINED__
#define __IPrintDocumentPackageTarget_FWD_DEFINED__
typedef interface IPrintDocumentPackageTarget IPrintDocumentPackageTarget;
#ifdef __cplusplus
interface IPrintDocumentPackageTarget;
#endif /* __cplusplus */
#endif

#endif
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#ifndef __IPrintDocumentPackageStatusEvent_FWD_DEFINED__
#define __IPrintDocumentPackageStatusEvent_FWD_DEFINED__
typedef interface IPrintDocumentPackageStatusEvent IPrintDocumentPackageStatusEvent;
#ifdef __cplusplus
interface IPrintDocumentPackageStatusEvent;
#endif /* __cplusplus */
#endif

#ifndef __IPrintDocumentPackageTargetFactory_FWD_DEFINED__
#define __IPrintDocumentPackageTargetFactory_FWD_DEFINED__
typedef interface IPrintDocumentPackageTargetFactory IPrintDocumentPackageTargetFactory;
#ifdef __cplusplus
interface IPrintDocumentPackageTargetFactory;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * PrintDocumentPackageTarget coclass
 */

DEFINE_GUID(CLSID_PrintDocumentPackageTarget, 0x4842669e, 0x9947, 0x46ea, 0x8b,0xa2, 0xd8,0xcc,0xe4,0x32,0xc2,0xca);

#ifdef __cplusplus
class DECLSPEC_UUID("4842669e-9947-46ea-8ba2-d8cce432c2ca") PrintDocumentPackageTarget;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(PrintDocumentPackageTarget, 0x4842669e, 0x9947, 0x46ea, 0x8b,0xa2, 0xd8,0xcc,0xe4,0x32,0xc2,0xca)
#endif
#endif

/*****************************************************************************
 * PrintDocumentPackageTargetFactory coclass
 */

DEFINE_GUID(CLSID_PrintDocumentPackageTargetFactory, 0x348ef17d, 0x6c81, 0x4982, 0x92,0xb4, 0xee,0x18,0x8a,0x43,0x86,0x7a);

#ifdef __cplusplus
class DECLSPEC_UUID("348ef17d-6c81-4982-92b4-ee188a43867a") PrintDocumentPackageTargetFactory;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(PrintDocumentPackageTargetFactory, 0x348ef17d, 0x6c81, 0x4982, 0x92,0xb4, 0xee,0x18,0x8a,0x43,0x86,0x7a)
#endif
#endif

#endif
#endif /* __PrintDocumentTargetLib_LIBRARY_DEFINED__ */
#endif
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __documenttarget_h__ */
