epoc32/include/ecom/ecom.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100 (2010-03-31)
branchSymbian2
changeset 3 e1b950c65cb4
parent 0 061f57f2323e
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@2
     4
// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
// The definitions required for the use
williamr@2
    15
// of the ECOM framework by a client are contained / defined here.
williamr@2
    16
// 
williamr@2
    17
//
williamr@2
    18
williamr@2
    19
williamr@2
    20
williamr@2
    21
#ifndef __ECOM_H__
williamr@2
    22
#define __ECOM_H__
williamr@2
    23
williamr@2
    24
//////////////////////////////////////////////////////////////////////////////
williamr@2
    25
// Include Files
williamr@2
    26
williamr@2
    27
#include <e32base.h>
williamr@2
    28
#include <s32std.h>
williamr@2
    29
#include <f32file.h>
williamr@2
    30
williamr@2
    31
#include <ecom/ecomerrorcodes.h>
williamr@2
    32
#include <ecom/ecomresolverparams.h>
williamr@2
    33
#include <ecom/implementationinformation.h>
williamr@2
    34
williamr@2
    35
williamr@2
    36
//////////////////////////////////////////////////////////////////////////////
williamr@2
    37
// Forward declarations
williamr@2
    38
williamr@2
    39
class CGlobalData;
williamr@2
    40
williamr@2
    41
williamr@2
    42
//////////////////////////////////////////////////////////////////////////////
williamr@2
    43
// Global Constants
williamr@2
    44
williamr@2
    45
/** 
williamr@2
    46
The UID identifying the ROM-Only CResolver Interface Implementation. 
williamr@2
    47
This resolver only returns implementations present on R/O internal media
williamr@2
    48
(built-in) or upgrades of such implementations on R/W media. It does not 
williamr@2
    49
return implementations that solely reside on R/W media. 
williamr@2
    50
williamr@2
    51
@publishedAll
williamr@2
    52
@released
williamr@2
    53
*/
williamr@2
    54
const TUid KRomOnlyResolverUid = {0x10009D92};
williamr@2
    55
williamr@2
    56
williamr@2
    57
//////////////////////////////////////////////////////////////////////////////
williamr@2
    58
// REComSession class
williamr@2
    59
williamr@2
    60
/**
williamr@2
    61
The REComSession singleton class provides an API to identify (resolution), 
williamr@2
    62
instantiate, and destroy interface class implementations requested by 
williamr@2
    63
ECOM clients. It manages the session connection to the ECOM Server itself so 
williamr@2
    64
that typically only one connection is made to the ECOM Server per thread.
williamr@2
    65
It provides an un-initialise function where it releases memory and handles
williamr@2
    66
of unused plug-ins, see the FinalClose() function. It also ensures that all
williamr@2
    67
necessary clean-up is performed in the event of a Leave by any of the
williamr@2
    68
ListImplementationsL() or CreateImplementationL() methods.
williamr@2
    69
williamr@2
    70
Note: Although a public default constructor is provided in this class
williamr@2
    71
it is strongly recommended this object is never created by users of this
williamr@2
    72
API on the stack or heap by value. To access the non-static methods of this
williamr@2
    73
API use the static OpenL() method to obtain a pointer or a 
williamr@2
    74
reference to the single reference counted session in use. Close() must be 
williamr@2
    75
called when finished with.
williamr@2
    76
williamr@2
    77
Special care must be taken when using aDtorIDKey. It is a 32-bit instance key
williamr@2
    78
that is returned from a call to one of the CreateImplementationL() methods. 
williamr@2
    79
This instance key must only be used with DestroyedImplementation() to identify
williamr@2
    80
the implementation instance for destruction, or GetImplementationUidL() to
williamr@2
    81
retrieve the Implementation Uid of the instance it refers to.
williamr@2
    82
No meaning must be attached to this instance key by ECOM clients 
williamr@2
    83
and it must not be used for any other purpose.
williamr@2
    84
williamr@2
    85
williamr@2
    86
@see REComSession::FinalClose()
williamr@2
    87
@publishedAll
williamr@2
    88
@released
williamr@2
    89
*/
williamr@2
    90
class REComSession  : public RSessionBase
williamr@2
    91
	{
williamr@2
    92
	friend class CGlobalData;
williamr@2
    93
public:
williamr@2
    94
williamr@2
    95
	IMPORT_C REComSession();
williamr@2
    96
	IMPORT_C static REComSession& OpenL();
williamr@2
    97
	IMPORT_C void Close();
williamr@2
    98
	
williamr@2
    99
	// Notification API declarations
williamr@2
   100
     
williamr@2
   101
	IMPORT_C void NotifyOnChange(TRequestStatus& aStatus);
williamr@2
   102
	IMPORT_C void CancelNotifyOnChange(TRequestStatus& aStatus);
williamr@2
   103
	
williamr@2
   104
	// List implementations API declarations
williamr@2
   105
	//
williamr@2
   106
	// Use LI1 to list all implementations, unfiltered.
williamr@2
   107
	// Use LI2 when default resolving required on the returned list.
williamr@2
   108
	// Use LI3 when custom resolving required on the returned list.
williamr@2
   109
	
williamr@2
   110
	// ListImplementationsL - LI1
williamr@2
   111
	IMPORT_C static void ListImplementationsL(
williamr@2
   112
                            TUid aInterfaceUid,
williamr@2
   113
							RImplInfoPtrArray& aImplInfoArray);
williamr@2
   114
							
williamr@2
   115
	// ListImplementationsL - LI2
williamr@2
   116
	IMPORT_C static void ListImplementationsL(
williamr@2
   117
                            TUid aInterfaceUid, 
williamr@2
   118
							const TEComResolverParams& aResolutionParameters,
williamr@2
   119
							RImplInfoPtrArray& aImplInfoArray);
williamr@2
   120
							
williamr@2
   121
	// ListImplementationsL - LI3
williamr@2
   122
	IMPORT_C static void ListImplementationsL(
williamr@2
   123
                            TUid aInterfaceUid, 
williamr@2
   124
							const TEComResolverParams& aResolutionParameters, 
williamr@2
   125
							TUid aResolverUid,
williamr@2
   126
							RImplInfoPtrArray& aImplInfoArray);
williamr@2
   127
williamr@2
   128
	// Create implementations API declarations
williamr@2
   129
    //
williamr@2
   130
    // When Implementation UID is known: 
williamr@2
   131
    // Use CI1, CI2. 
williamr@2
   132
    // Use CI3, CI4 when you have construction parameters.
williamr@2
   133
    //
williamr@2
   134
    // When the Interface UID is known and default resolving is required:
williamr@2
   135
    // Use CI5, CI6. 
williamr@2
   136
    // Use CI7, CI8 when you have construction parameters.
williamr@2
   137
    // 
williamr@2
   138
    // When the Interface UID is known and custom resolving is required:
williamr@2
   139
    // Use CI9, CI10.
williamr@2
   140
    // Use CI11, CI12 when you have construction parameters.
williamr@2
   141
	
williamr@2
   142
	// CreateImplementationL - CI1
williamr@2
   143
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   144
                            TUid aImplementationUid, 
williamr@2
   145
                            TUid& aDtorIDKey);
williamr@2
   146
                            
williamr@2
   147
	// CreateImplementationL - CI2
williamr@2
   148
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   149
                            TUid aImplementationUid, 
williamr@2
   150
							TInt32 aKeyOffset);
williamr@2
   151
							
williamr@2
   152
	// CreateImplementationL - CI3
williamr@2
   153
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   154
                            TUid aImplementationUid, 
williamr@2
   155
							TUid& aDtorIDKey, 
williamr@2
   156
							TAny* aConstructionParameters);
williamr@2
   157
							
williamr@2
   158
	// CreateImplementationL - CI4
williamr@2
   159
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   160
                            TUid aImplementationUid, 
williamr@2
   161
							TInt32 aKeyOffset,
williamr@2
   162
							TAny* aConstructionParameters);
williamr@2
   163
							
williamr@2
   164
	// CreateImplementationL - CI5
williamr@2
   165
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   166
                            TUid aInterfaceUid, 
williamr@2
   167
							TUid& aDtorIDKey,
williamr@2
   168
							const TEComResolverParams& aResolutionParameters);
williamr@2
   169
							
williamr@2
   170
	// CreateImplementationL - CI6
williamr@2
   171
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   172
                            TUid aInterfaceUid, 
williamr@2
   173
							TInt32 aKeyOffset, 
williamr@2
   174
							const TEComResolverParams& aResolutionParameters);
williamr@2
   175
							
williamr@2
   176
	// CreateImplementationL - CI7
williamr@2
   177
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   178
                            TUid aInterfaceUid, 
williamr@2
   179
							TUid& aDtorIDKey, 
williamr@2
   180
							TAny* aConstructionParameters, 
williamr@2
   181
							const TEComResolverParams& aResolutionParameters);
williamr@2
   182
							
williamr@2
   183
	// CreateImplementationL - CI8
williamr@2
   184
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   185
                            TUid aInterfaceUid, 
williamr@2
   186
							TInt32 aKeyOffset, 
williamr@2
   187
							TAny* aConstructionParameters, 
williamr@2
   188
							const TEComResolverParams& aResolutionParameters);
williamr@2
   189
							
williamr@2
   190
	// CreateImplementationL - CI9
williamr@2
   191
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   192
                            TUid aInterfaceUid, 
williamr@2
   193
							TUid& aDtorIDKey, 
williamr@2
   194
							const TEComResolverParams& aResolutionParameters,
williamr@2
   195
							TUid aResolverUid);
williamr@2
   196
												
williamr@2
   197
	// CreateImplementationL - CI10
williamr@2
   198
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   199
                            TUid aInterfaceUid, 
williamr@2
   200
							TInt32 aKeyOffset,
williamr@2
   201
							const TEComResolverParams& aResolutionParameters, 
williamr@2
   202
							TUid aResolverUid);
williamr@2
   203
												
williamr@2
   204
	// CreateImplementationL - CI11
williamr@2
   205
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   206
                            TUid aInterfaceUid, 
williamr@2
   207
							TUid& aDtorIDKey, 
williamr@2
   208
							TAny* aConstructionParameters,
williamr@2
   209
							const TEComResolverParams& aResolutionParameters, 
williamr@2
   210
							TUid aResolverUid);
williamr@2
   211
												
williamr@2
   212
	// CreateImplementationL - CI12
williamr@2
   213
	IMPORT_C static TAny* CreateImplementationL(
williamr@2
   214
                            TUid aInterfaceUid, 
williamr@2
   215
							TInt32 aKeyOffset, 
williamr@2
   216
							TAny* aConstructionParameters,
williamr@2
   217
							const TEComResolverParams& aResolutionParameters,
williamr@2
   218
							TUid aResolverUid);
williamr@2
   219
	
williamr@2
   220
	// Get Implementation Uid from a Destructor Id Key
williamr@2
   221
	IMPORT_C static TUid GetImplementationUidL(
williamr@2
   222
							TUid aDtorIDKey);
williamr@2
   223
	
williamr@2
   224
    // Destroy Implementation API declaration											
williamr@2
   225
	IMPORT_C static void DestroyedImplementation(
williamr@2
   226
                            TUid aDtorIDKey);
williamr@2
   227
williamr@2
   228
williamr@2
   229
	// See developer documentation for use of FinalClose.
williamr@2
   230
	IMPORT_C static void FinalClose();
williamr@2
   231
williamr@2
   232
private:
williamr@2
   233
	
williamr@2
   234
	static REComSession& OpenLC();
williamr@2
   235
	
williamr@2
   236
	void ConstructL();
williamr@2
   237
	void ReallyClose();
williamr@2
   238
	
williamr@2
   239
	void ListImplementationsL(
williamr@2
   240
            TInt aServiceId, 
williamr@2
   241
			TUid aInterfaceUid, 
williamr@2
   242
			const TEComResolverParams& aResolutionParameters, 
williamr@2
   243
			TUid aResolverUid,
williamr@2
   244
			RImplInfoPtrArray& aImplInfoArray);
williamr@2
   245
			
williamr@2
   246
	TAny* ResolveAndCreateImplL(
williamr@2
   247
            TUid aImplementationUid, 
williamr@2
   248
			TUid& aDtorIDKey, 
williamr@2
   249
			TAny* aCreationParameters, 
williamr@2
   250
            TBool aCreationParamsFlag);
williamr@2
   251
                                     
williamr@2
   252
	TAny* ResolveAndCreateImplL(
williamr@2
   253
            TUid aInterfaceUid, 
williamr@2
   254
			const TEComResolverParams& aResolutionParameters, 
williamr@2
   255
			TUid& aDtorIDKey, 
williamr@2
   256
			TAny* aCreationParameters, 
williamr@2
   257
            TBool aCreationParamsFlag);
williamr@2
   258
                                     
williamr@2
   259
	TAny* ResolveAndCreateImplL(
williamr@2
   260
            TUid aInterfaceUid, 
williamr@2
   261
			const TEComResolverParams& aResolutionParameters, 
williamr@2
   262
			TUid aResolverUid, 
williamr@2
   263
			TUid& aDtorIDKey, 
williamr@2
   264
			TAny* aCreationParameters, 
williamr@2
   265
            TBool aCreationParamsFlag);
williamr@2
   266
                                     
williamr@2
   267
	TAny* ResolveAndCreateImplL(
williamr@2
   268
            TInt aServiceId,
williamr@2
   269
			TUid aInterfaceUid, 
williamr@2
   270
			const TEComResolverParams& aResolutionParameters, 
williamr@2
   271
			TUid aResolverUid, 
williamr@2
   272
			TUid& aDtorIDKey, 
williamr@2
   273
			TAny* aCreationParameters, 
williamr@2
   274
            TBool aCreationParamsFlag);
williamr@2
   275
williamr@2
   276
public:
williamr@2
   277
    //This API is for internal use only and for testing purposes.
williamr@2
   278
	IMPORT_C static void SetGetParametersL(const TIpcArgs &aArgs);
williamr@2
   279
												
williamr@2
   280
private:
williamr@2
   281
    /** Not used */
williamr@2
   282
	TInt iReserved1;
williamr@2
   283
williamr@2
   284
	/** Not used */
williamr@2
   285
	TBool iReserved3;
williamr@2
   286
williamr@2
   287
    /** not used */
williamr@2
   288
	TInt iReserved2;
williamr@2
   289
	};
williamr@2
   290
williamr@2
   291
williamr@2
   292
#endif	// __ECOM_H__