/* **++ ** ** Copyright (c) 2002 Microsoft Corporation ** ** ** Module Name: ** ** main.cpp ** ** ** Abstract: ** ** Test program to to register a Writer with various properties ** ** Author: ** ** Reuven Lax [reuvenl] 04-June-2002 ** ** ** Revision History: ** **-- */ /////////////////////////////////////////////////////////////////////////////// // Includes #include "stdafx.h" #include "main.h" #include "swriter.h" #include "writerconfig.h" #include #include #include #include /////////////////////////////////////////////////////////////////////////////// // Declarations HANDLE g_quitEvent = NULL; using Utility::checkReturn; /////////////////////////////////////////////////////////////////////////////// extern "C" __cdecl wmain(int argc, wchar_t ** argv) try { if (argc != 2) throw Utility::TestWriterException(L"Invalid number of arguments\n Format: vswriter.exe "); HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED ); checkReturn(hr, L"CoInitializeEx"); loadFile(argv[1]); hr = ::CoInitializeSecurity( NULL, // IN PSECURITY_DESCRIPTOR pSecDesc, -1, // IN LONG cAuthSvc, NULL, // IN SOLE_AUTHENTICATION_SERVICE *asAuthSvc, NULL, // IN void *pReserved1, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // IN DWORD dwAuthnLevel, RPC_C_IMP_LEVEL_IDENTIFY, // IN DWORD dwImpLevel, NULL, // IN void *pAuthList, EOAC_NONE, // IN DWORD dwCapabilities, NULL // IN void *pReserved3 ); checkReturn(hr, L"CoInitializeSecurity"); g_quitEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL); if (g_quitEvent == NULL) throw Utility::TestWriterException(L"Internal Error: could not create event\n"); // set a control handler that allows the writer to be shut down if (!::SetConsoleCtrlHandler(handler, TRUE)) checkReturn(HRESULT_FROM_WIN32(::GetLastError()), L"SetConsoleCtrlHandler"); // We want the writer to go out of scope before the return statement { TestWriter writer; hr = writer.Initialize(); checkReturn(hr, L"TestWriter::Initialize"); if(::WaitForSingleObject(g_quitEvent, INFINITE) != WAIT_OBJECT_0) throw Utility::TestWriterException(L"internal Error: did not successfully wait on event\n"); } return 0; } catch(const std::exception& error) { Utility::printStatus(error.what(), Utility::low); exit(1); } catch(HRESULT error) { Utility::TestWriterException e(error); Utility::printStatus(e.what(), Utility::low); exit(1); } void loadFile(wchar_t* fileName) { CXMLDocument document; if (!document.LoadFromFile(fileName)) Utility::parseError(document); CComBSTR xmlString = document.SaveAsXML(); WriterConfiguration::instance()->loadFromXML((BSTR)xmlString); return; } BOOL WINAPI handler(DWORD dwCtrlType) { // only print to console if it's safe if ((dwCtrlType == CTRL_C_EVENT) || (dwCtrlType == CTRL_BREAK_EVENT)) Utility::printStatus(L"Terminating writer", Utility::low); // we want to quit independent of what the control event was ::SetEvent(g_quitEvent); return TRUE; }