/* Menes - C++ High-Level Utility Library * Copyright (C) 2003-2005 Jay Freeman (saurik) */ /* * Redistribution and use in source and binary * forms, with or without modification, are permitted * provided that the following conditions are met: * * 1. Redistributions of source code must retain the * above copyright notice, this list of conditions * and the following disclaimer. * 2. Redistributions in binary form must reproduce the * above copyright notice, this list of conditions * and the following disclaimer in the documentation * and/or other materials provided with the * distribution. * 3. The name of the author may not be used to endorse * or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "cxx/standard.hh" #pragma hdrstop("build/cxx/standard.pch") #include "api/com/error.hpp" #include "cse/utf16.hpp" #include "ios/string.hpp" #include "ios/printwriter.hpp" #include #include #include "api/win32/undefine.hpp" namespace api { namespace Com { const char *ApiTraits::GetName() { return "COM"; } ApiTraits::ErrorCode ApiTraits::GetLastError() { ErrorCode code; ::GetErrorInfo(0, &code.Mend()); return code; } int ApiTraits::ToInteger(const ErrorCode &code) { return static_cast(reinterpret_cast(code.GetValue())); } cse::String ApiTraits::GetMessage(const ErrorCode &code) { _S message; { BSTR source; code->GetSource(&source); message << cse::Utf16String(source, reinterpret_cast(source)[-1]); ::SysFreeString(source); } message << ": "; { BSTR description; code->GetDescription(&description); message << cse::Utf16String(description, reinterpret_cast(description)[-1]); ::SysFreeString(description); } return message; } } }