00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <badesca.h>
00032
00033 #include <interface.h>
00034
00035 #include "CommonFramework.h"
00036 #include "InterfaceClient.h"
00037
00038
00039 void CleanupEComArray(TAny* aArray);
00040
00041
00042 LOCAL_C void doExampleL()
00043 {
00044 _LIT(KText,"ECom client example\n\n");
00045 console->Printf(KText);
00046
00047 TInterfaceClient client;
00048 client.GetDefaultL();
00049 client.GetBySpecificationL();
00050 client.GetByDiscoveryL();
00051
00052 REComSession::FinalClose();
00053 }
00054
00055 void TInterfaceClient::GetDefaultL()
00056 {
00057 _LIT(KText,"Case 1: getting the default implementation\n");
00058 console->Printf(KText);
00059
00060
00061 CExampleInterface* ex1 = CExampleInterface::NewL();
00062 CleanupStack::PushL(ex1);
00063 TBuf<100> buf;
00064 ex1 -> DoMethodL(buf);
00065 CleanupStack::PopAndDestroy();
00066
00067
00068 console -> Printf(buf);
00069 }
00070
00071 void TInterfaceClient::GetBySpecificationL()
00072 {
00073 _LIT(KText,"\nCase 2: getting an implementation by specification\n");
00074 console->Printf(KText);
00075
00076
00077 CExampleInterface::TExampleInterfaceInitParams p;
00078 p.integer = 0;
00079 _LIT(KMsg1,"Data in value: %d\n");
00080 console -> Printf(KMsg1,p.integer);
00081
00082
00083 _LIT8(KSpec,"text/xml");
00084 CExampleInterface* ex1 = CExampleInterface::NewL(KSpec,p);
00085 CleanupStack::PushL(ex1);
00086 TBuf<100> buf;
00087 ex1 -> DoMethodL(buf);
00088 CleanupStack::PopAndDestroy();
00089
00090
00091 console -> Printf(buf);
00092 _LIT(KMsg2,"Data out value: %d\n");
00093 console -> Printf(KMsg2,p.integer);
00094 }
00095
00096
00097 void TInterfaceClient::GetByDiscoveryL()
00098 {
00099 _LIT(KText,"\nCase 3: getting all implementations\n");
00100 console->Printf(KText);
00101
00102
00103 RImplInfoPtrArray infoArray;
00104
00105
00106 TCleanupItem cleanup(CleanupEComArray, &infoArray);
00107 CleanupStack::PushL(cleanup);
00108 CExampleInterface::ListAllImplementationsL(infoArray);
00109
00110
00111
00112 CExampleInterface* ex;
00113 TBuf<255> buf;
00114 for (TInt i=0; i< infoArray.Count(); i++)
00115 {
00116
00117 TPtrC8 type = infoArray[i]->DataType();
00118 type.Set(type.Left(type.Locate('|')));
00119
00120 buf.Copy(type);
00121 console -> Printf(buf);
00122 console -> Printf(_L(": "));
00123
00124
00125 ex = CExampleInterface::NewL(type);
00126 CleanupStack::PushL(ex);
00127 ex -> DoMethodL(buf);
00128 CleanupStack::PopAndDestroy();
00129
00130
00131 console -> Printf(buf);
00132
00133 ex = NULL;
00134 buf.Zero();
00135 }
00136
00137
00138 CleanupStack::PopAndDestroy();
00139 }
00140
00141
00142 void CleanupEComArray(TAny* aArray)
00143 {
00144 (static_cast<RImplInfoPtrArray*> (aArray))->ResetAndDestroy();
00145 (static_cast<RImplInfoPtrArray*> (aArray))->Close();
00146 }
00147