//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1993.
//
//  File:	host.idl
//
//  Contents:	Definition of private ORPC interface between apartments.
//		Used to activate an inproc dll of one threading model from
//		an apartment of a different threading model.
//
//  History:	04-Mar-96   Rickhi	Created
//
//--------------------------------------------------------------------------

//
// WIN64 07/01/98 v-thief
//
//    This is a temporary implementation/port. 
//    We could use a mapping between DWORD dwPDE and pointers.
//    This mapping API should be exposed by a common API. like rpc for example.
//    However, for now I am going to try the polymorphic MIDL type: __int3264.
//    Another point is that PDE or LFN were type as unsigned types, even if 
//    pointers ( signed types for Microsoft compilers ) were stored there.
//    I respected this and use an "unsigned __int3264".
//    For now also, I do not change the name of the first parameter but it 
//    should be changed to "hPDE" or something similar.
//
// Resolution of issue:
//    This interface never goes out of process so making the first parameter ULONG64
//    is fine since the RPC proxy will marshal the pointer-width value. NT Bug #232947
//    showed up because of using a DCE proxy that truncated the dwPDE argument.
//

[ uuid(00000141-0000-0000-C000-000000000046),
  pointer_default(unique),
  object
]

interface IDLLHost : IUnknown
{
#ifndef DO_NO_IMPORTS
    import "iface.idl";
    import "unknwn.idl";
    import "objidl.idl";
#endif
    enum {DLLHOST_IS_DPE    = 0x01,
          DLLHOST_IS_PFN    = 0x02 };

    HRESULT DllGetClassObject(
	[in] ULONG64 hDPE,
	[in] REFCLSID rclsid,
	[in] REFIID   riid,
	[out, iid_is(riid)] IUnknown **ppunk,
	[in] DWORD dwFlags);
}
