#define COREPROX_POLARITY __declspec( dllimport ) #include #include #include #include "evaltree.h" extern "C" int __cdecl wmain( int argc, wchar_t** argv ) { CoInitialize( NULL ); if ( argc < 2 ) { wprintf(L"Usage: %s \n", argv[0] ); return 0; } HRESULT hr; IWbemServices* pSvc; IWbemLocator* pLocator; hr = CoCreateInstance( CLSID_WbemLocator, NULL, CLSCTX_INPROC, IID_IWbemLocator, (void**)&pLocator ); assert(SUCCEEDED(hr)); hr = pLocator->ConnectServer( L"root\\default", NULL, NULL, NULL, 0, NULL, NULL, &pSvc ); assert(SUCCEEDED(hr)); CStandardMetaData Meta( pSvc ); CContextMetaData CtxMeta( &Meta, NULL ); CEvalTree Tree; hr = Tree.CreateFromQuery( &CtxMeta, argv[1] ); if ( FAILED(hr) ) { printf("FAILED creating tree on init query. HR = 0x%x\n", hr ); return 1; } for( int i=2; i < argc; i++ ) { CEvalTree Tree2; hr = Tree2.CreateFromQuery( &CtxMeta, argv[i] ); if ( FAILED(hr) ) { printf("FAILED creating tree on %d query. HR = 0x%x\n", hr, i ); return 1; } Tree2.Rebase( i ); hr = Tree.CombineWith( Tree2, &CtxMeta, EVAL_OP_COMBINE, WBEM_FLAG_MANDATORY_MERGE ); if ( FAILED(hr) ) { printf("FAILED combining tree on %d query. HR = 0x%x\n", hr, i ); return 1; } } printf( "Tree is ... \n" ); Tree.Dump( stdout ); return 0; }