Copyright | (c) 2009 Sigbjorn Finne |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | sof@forkIO.com |
Stability | provisional |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Representing and working with COM's 'exception model' (HRESULT
s) in Haskell.
Failures in COM method calls are mapped into Exception
Haskell exceptions,
providing convenient handlers to catch and throw these.
Synopsis
- catchComException :: IO a -> (Com_Exception -> IO a) -> IO a
- catch_ce_ :: IO a -> (Maybe ComException -> IO a) -> IO a
- type Com_Exception = Either IOException ComException
- throwIOComException :: Com_Exception -> IO a
- check2HR :: HRESULT -> IO ()
- checkBool :: Int32 -> IO ()
- returnHR :: IO () -> IO HRESULT
- isCoError :: Com_Exception -> Bool
- coGetException :: Com_Exception -> Maybe ComException
- coGetErrorHR :: Com_Exception -> Maybe HRESULT
- coGetErrorString :: Com_Exception -> String
- printComError :: Com_Exception -> IO ()
- hresultToString :: HRESULT -> IO String
- coAssert :: Bool -> String -> IO ()
- coOnFail :: IO a -> String -> IO a
- coFail :: String -> IO a
- s_FALSE :: HRESULT
- s_OK :: HRESULT
- nOERROR :: HRESULT
- nO_ERROR :: HRESULT
- sEVERITY_ERROR :: Int32
- sEVERITY_SUCCESS :: Int32
- succeeded :: HRESULT -> Bool
- winErrorToHR :: Int32 -> HRESULT
- hRESULT_CODE :: HRESULT -> Int32
- hRESULT_FACILITY :: HRESULT -> Int32
- hRESULT_SEVERITY :: HRESULT -> Int32
- mkHRESULT :: Int32 -> Int32 -> Int32 -> HRESULT
- cAT_E_CATIDNOEXIST :: HRESULT
- cAT_E_FIRST :: HRESULT
- cAT_E_LAST :: HRESULT
- cAT_E_NODESCRIPTION :: HRESULT
- cLASS_E_CLASSNOTAVAILABLE :: HRESULT
- cLASS_E_NOAGGREGATION :: HRESULT
- cLASS_E_NOTLICENSED :: HRESULT
- cO_E_ACCESSCHECKFAILED :: HRESULT
- cO_E_ACESINWRONGORDER :: HRESULT
- cO_E_ACNOTINITIALIZED :: HRESULT
- cO_E_ALREADYINITIALIZED :: HRESULT
- cO_E_APPDIDNTREG :: HRESULT
- cO_E_APPNOTFOUND :: HRESULT
- cO_E_APPSINGLEUSE :: HRESULT
- cO_E_BAD_PATH :: HRESULT
- cO_E_BAD_SERVER_NAME :: HRESULT
- cO_E_CANTDETERMINECLASS :: HRESULT
- cO_E_CANT_REMOTE :: HRESULT
- cO_E_CLASSSTRING :: HRESULT
- cO_E_CLASS_CREATE_FAILED :: HRESULT
- cO_E_CLSREG_INCONSISTENT :: HRESULT
- cO_E_CONVERSIONFAILED :: HRESULT
- cO_E_CREATEPROCESS_FAILURE :: HRESULT
- cO_E_DECODEFAILED :: HRESULT
- cO_E_DLLNOTFOUND :: HRESULT
- cO_E_ERRORINAPP :: HRESULT
- cO_E_ERRORINDLL :: HRESULT
- cO_E_EXCEEDSYSACLLIMIT :: HRESULT
- cO_E_FAILEDTOCLOSEHANDLE :: HRESULT
- cO_E_FAILEDTOCREATEFILE :: HRESULT
- cO_E_FAILEDTOGENUUID :: HRESULT
- cO_E_FAILEDTOGETSECCTX :: HRESULT
- cO_E_FAILEDTOGETTOKENINFO :: HRESULT
- cO_E_FAILEDTOGETWINDIR :: HRESULT
- cO_E_FAILEDTOIMPERSONATE :: HRESULT
- cO_E_FAILEDTOOPENPROCESSTOKEN :: HRESULT
- cO_E_FAILEDTOOPENTHREADTOKEN :: HRESULT
- cO_E_FAILEDTOQUERYCLIENTBLANKET :: HRESULT
- cO_E_FAILEDTOSETDACL :: HRESULT
- cO_E_FIRST :: HRESULT
- cO_E_IIDREG_INCONSISTENT :: HRESULT
- cO_E_IIDSTRING :: HRESULT
- cO_E_INCOMPATIBLESTREAMVERSION :: HRESULT
- cO_E_INIT_CLASS_CACHE :: HRESULT
- cO_E_INIT_MEMORY_ALLOCATOR :: HRESULT
- cO_E_INIT_ONLY_SINGLE_THREADED :: HRESULT
- cO_E_INIT_RPC_CHANNEL :: HRESULT
- cO_E_INIT_SCM_EXEC_FAILURE :: HRESULT
- cO_E_INIT_SCM_FILE_MAPPING_EXISTS :: HRESULT
- cO_E_INIT_SCM_MAP_VIEW_OF_FILE :: HRESULT
- cO_E_INIT_SCM_MUTEX_EXISTS :: HRESULT
- cO_E_INIT_SHARED_ALLOCATOR :: HRESULT
- cO_E_INIT_TLS :: HRESULT
- cO_E_INIT_TLS_CHANNEL_CONTROL :: HRESULT
- cO_E_INIT_TLS_SET_CHANNEL_CONTROL :: HRESULT
- cO_E_INIT_UNACCEPTED_USER_ALLOCATOR :: HRESULT
- cO_E_INVALIDSID :: HRESULT
- cO_E_LAST :: HRESULT
- cO_E_LAUNCH_PERMSSION_DENIED :: HRESULT
- cO_E_LOOKUPACCNAMEFAILED :: HRESULT
- cO_E_LOOKUPACCSIDFAILED :: HRESULT
- cO_E_MSI_ERROR :: HRESULT
- cO_E_NETACCESSAPIFAILED :: HRESULT
- cO_E_NOMATCHINGNAMEFOUND :: HRESULT
- cO_E_NOMATCHINGSIDFOUND :: HRESULT
- cO_E_NOTINITIALIZED :: HRESULT
- cO_E_NOT_SUPPORTED :: HRESULT
- cO_E_OBJISREG :: HRESULT
- cO_E_OBJNOTCONNECTED :: HRESULT
- cO_E_OBJNOTREG :: HRESULT
- cO_E_OBJSRV_RPC_FAILURE :: HRESULT
- cO_E_OLE1DDE_DISABLED :: HRESULT
- cO_E_PATHTOOLONG :: HRESULT
- cO_E_RELEASED :: HRESULT
- cO_E_RELOAD_DLL :: HRESULT
- cO_E_REMOTE_COMMUNICATION_FAILURE :: HRESULT
- cO_E_RUNAS_CREATEPROCESS_FAILURE :: HRESULT
- cO_E_RUNAS_LOGON_FAILURE :: HRESULT
- cO_E_RUNAS_SYNTAX :: HRESULT
- cO_E_SCM_ERROR :: HRESULT
- cO_E_SCM_RPC_FAILURE :: HRESULT
- cO_E_SERVER_EXEC_FAILURE :: HRESULT
- cO_E_SERVER_START_TIMEOUT :: HRESULT
- cO_E_SERVER_STOPPING :: HRESULT
- cO_E_SETSERLHNDLFAILED :: HRESULT
- cO_E_START_SERVICE_FAILURE :: HRESULT
- cO_E_TRUSTEEDOESNTMATCHCLIENT :: HRESULT
- cO_E_WRONGOSFORAPP :: HRESULT
- cO_E_WRONGTRUSTEENAMESYNTAX :: HRESULT
- cO_E_WRONG_SERVER_IDENTITY :: HRESULT
- cO_S_FIRST :: HRESULT
- cO_S_LAST :: HRESULT
- cO_S_NOTALLINTERFACES :: HRESULT
- dISP_E_ARRAYISLOCKED :: HRESULT
- dISP_E_BADCALLEE :: HRESULT
- dISP_E_BADINDEX :: HRESULT
- dISP_E_BADPARAMCOUNT :: HRESULT
- dISP_E_BADVARTYPE :: HRESULT
- dISP_E_DIVBYZERO :: HRESULT
- dISP_E_EXCEPTION :: HRESULT
- dISP_E_MEMBERNOTFOUND :: HRESULT
- dISP_E_NONAMEDARGS :: HRESULT
- dISP_E_NOTACOLLECTION :: HRESULT
- dISP_E_OVERFLOW :: HRESULT
- dISP_E_PARAMNOTFOUND :: HRESULT
- dISP_E_PARAMNOTOPTIONAL :: HRESULT
- dISP_E_TYPEMISMATCH :: HRESULT
- dISP_E_UNKNOWNINTERFACE :: HRESULT
- dISP_E_UNKNOWNLCID :: HRESULT
- dISP_E_UNKNOWNNAME :: HRESULT
- dV_E_CLIPFORMAT :: HRESULT
- dV_E_DVASPECT :: HRESULT
- dV_E_DVTARGETDEVICE :: HRESULT
- dV_E_DVTARGETDEVICE_SIZE :: HRESULT
- dV_E_FORMATETC :: HRESULT
- dV_E_LINDEX :: HRESULT
- dV_E_NOIVIEWOBJECT :: HRESULT
- dV_E_STATDATA :: HRESULT
- dV_E_STGMEDIUM :: HRESULT
- dV_E_TYMED :: HRESULT
- e_ABORT :: HRESULT
- e_ACCESSDENIED :: HRESULT
- e_FAIL :: HRESULT
- e_HANDLE :: HRESULT
- e_INVALIDARG :: HRESULT
- e_NOINTERFACE :: HRESULT
- e_NOTIMPL :: HRESULT
- e_OUTOFMEMORY :: HRESULT
- e_PENDING :: HRESULT
- e_POINTER :: HRESULT
- e_UNEXPECTED :: HRESULT
- fACILITY_CERT :: HRESULT
- fACILITY_CONTROL :: HRESULT
- fACILITY_DISPATCH :: HRESULT
- fACILITY_INTERNET :: HRESULT
- fACILITY_ITF :: HRESULT
- fACILITY_MEDIASERVER :: HRESULT
- fACILITY_MSMQ :: HRESULT
- fACILITY_NT_BIT :: HRESULT
- fACILITY_NULL :: HRESULT
- fACILITY_RPC :: HRESULT
- fACILITY_SETUPAPI :: HRESULT
- fACILITY_SSPI :: HRESULT
- fACILITY_STORAGE :: HRESULT
- fACILITY_WIN32 :: HRESULT
- fACILITY_WINDOWS :: HRESULT
- iNPLACE_E_FIRST :: HRESULT
- iNPLACE_E_LAST :: HRESULT
- iNPLACE_E_NOTOOLSPACE :: HRESULT
- iNPLACE_E_NOTUNDOABLE :: HRESULT
- iNPLACE_S_FIRST :: HRESULT
- iNPLACE_S_LAST :: HRESULT
- iNPLACE_S_TRUNCATED :: HRESULT
- mARSHAL_E_FIRST :: HRESULT
- mARSHAL_E_LAST :: HRESULT
- mARSHAL_S_FIRST :: HRESULT
- mARSHAL_S_LAST :: HRESULT
- mEM_E_INVALID_LINK :: HRESULT
- mEM_E_INVALID_ROOT :: HRESULT
- mEM_E_INVALID_SIZE :: HRESULT
- mK_E_CANTOPENFILE :: HRESULT
- mK_E_CONNECTMANUALLY :: HRESULT
- mK_E_ENUMERATION_FAILED :: HRESULT
- mK_E_EXCEEDEDDEADLINE :: HRESULT
- mK_E_FIRST :: HRESULT
- mK_E_INTERMEDIATEINTERFACENOTSUPPORTED :: HRESULT
- mK_E_INVALIDEXTENSION :: HRESULT
- mK_E_LAST :: HRESULT
- mK_E_MUSTBOTHERUSER :: HRESULT
- mK_E_NEEDGENERIC :: HRESULT
- mK_E_NOINVERSE :: HRESULT
- mK_E_NOOBJECT :: HRESULT
- mK_E_NOPREFIX :: HRESULT
- mK_E_NOSTORAGE :: HRESULT
- mK_E_NOTBINDABLE :: HRESULT
- mK_E_NOTBOUND :: HRESULT
- mK_E_NO_NORMALIZED :: HRESULT
- mK_E_SYNTAX :: HRESULT
- mK_E_UNAVAILABLE :: HRESULT
- mK_S_FIRST :: HRESULT
- mK_S_HIM :: HRESULT
- mK_S_LAST :: HRESULT
- mK_S_ME :: HRESULT
- mK_S_MONIKERALREADYREGISTERED :: HRESULT
- mK_S_REDUCED_TO_SELF :: HRESULT
- mK_S_US :: HRESULT
- oLEOBJ_E_FIRST :: HRESULT
- oLEOBJ_E_INVALIDVERB :: HRESULT
- oLEOBJ_E_LAST :: HRESULT
- oLEOBJ_E_NOVERBS :: HRESULT
- oLEOBJ_S_CANNOT_DOVERB_NOW :: HRESULT
- oLEOBJ_S_FIRST :: HRESULT
- oLEOBJ_S_INVALIDHWND :: HRESULT
- oLEOBJ_S_INVALIDVERB :: HRESULT
- oLEOBJ_S_LAST :: HRESULT
- oLE_E_ADVF :: HRESULT
- oLE_E_ADVISENOTSUPPORTED :: HRESULT
- oLE_E_BLANK :: HRESULT
- oLE_E_CANTCONVERT :: HRESULT
- oLE_E_CANT_BINDTOSOURCE :: HRESULT
- oLE_E_CANT_GETMONIKER :: HRESULT
- oLE_E_CLASSDIFF :: HRESULT
- oLE_E_ENUM_NOMORE :: HRESULT
- oLE_E_FIRST :: HRESULT
- oLE_E_INVALIDHWND :: HRESULT
- oLE_E_INVALIDRECT :: HRESULT
- oLE_E_LAST :: HRESULT
- oLE_E_NOCACHE :: HRESULT
- oLE_E_NOCONNECTION :: HRESULT
- oLE_E_NOSTORAGE :: HRESULT
- oLE_E_NOTRUNNING :: HRESULT
- oLE_E_NOT_INPLACEACTIVE :: HRESULT
- oLE_E_OLEVERB :: HRESULT
- oLE_E_PROMPTSAVECANCELLED :: HRESULT
- oLE_E_STATIC :: HRESULT
- oLE_E_WRONGCOMPOBJ :: HRESULT
- oLE_S_FIRST :: HRESULT
- oLE_S_LAST :: HRESULT
- oLE_S_MAC_CLIPFORMAT :: HRESULT
- oLE_S_STATIC :: HRESULT
- oLE_S_USEREG :: HRESULT
- pERSIST_E_NOTSELFSIZING :: HRESULT
- pERSIST_E_SIZEDEFINITE :: HRESULT
- pERSIST_E_SIZEINDEFINITE :: HRESULT
- sTG_E_ABNORMALAPIEXIT :: HRESULT
- sTG_E_ACCESSDENIED :: HRESULT
- sTG_E_BADBASEADDRESS :: HRESULT
- sTG_E_CANTSAVE :: HRESULT
- sTG_E_DISKISWRITEPROTECTED :: HRESULT
- sTG_E_DOCFILECORRUPT :: HRESULT
- sTG_E_EXTANTMARSHALLINGS :: HRESULT
- sTG_E_FILEALREADYEXISTS :: HRESULT
- sTG_E_FILENOTFOUND :: HRESULT
- sTG_E_INCOMPLETE :: HRESULT
- sTG_E_INSUFFICIENTMEMORY :: HRESULT
- sTG_E_INUSE :: HRESULT
- sTG_E_INVALIDFLAG :: HRESULT
- sTG_E_INVALIDFUNCTION :: HRESULT
- sTG_E_INVALIDHANDLE :: HRESULT
- sTG_E_INVALIDHEADER :: HRESULT
- sTG_E_INVALIDNAME :: HRESULT
- sTG_E_INVALIDPARAMETER :: HRESULT
- sTG_E_INVALIDPOINTER :: HRESULT
- sTG_E_LOCKVIOLATION :: HRESULT
- sTG_E_MEDIUMFULL :: HRESULT
- sTG_E_NOMOREFILES :: HRESULT
- sTG_E_NOTCURRENT :: HRESULT
- sTG_E_NOTFILEBASEDSTORAGE :: HRESULT
- sTG_E_OLDDLL :: HRESULT
- sTG_E_OLDFORMAT :: HRESULT
- sTG_E_PATHNOTFOUND :: HRESULT
- sTG_E_PROPSETMISMATCHED :: HRESULT
- sTG_E_READFAULT :: HRESULT
- sTG_E_REVERTED :: HRESULT
- sTG_E_SEEKERROR :: HRESULT
- sTG_E_SHAREREQUIRED :: HRESULT
- sTG_E_SHAREVIOLATION :: HRESULT
- sTG_E_TERMINATED :: HRESULT
- sTG_E_TOOMANYOPENFILES :: HRESULT
- sTG_E_UNIMPLEMENTEDFUNCTION :: HRESULT
- sTG_E_UNKNOWN :: HRESULT
- sTG_E_WRITEFAULT :: HRESULT
- sTG_S_BLOCK :: HRESULT
- sTG_S_CANNOTCONSOLIDATE :: HRESULT
- sTG_S_CONSOLIDATIONFAILED :: HRESULT
- sTG_S_CONVERTED :: HRESULT
- sTG_S_MONITORING :: HRESULT
- sTG_S_MULTIPLEOPENS :: HRESULT
- sTG_S_RETRYNOW :: HRESULT
- tYPE_E_AMBIGUOUSNAME :: HRESULT
- tYPE_E_BADMODULEKIND :: HRESULT
- tYPE_E_BUFFERTOOSMALL :: HRESULT
- tYPE_E_CANTCREATETMPFILE :: HRESULT
- tYPE_E_CANTLOADLIBRARY :: HRESULT
- tYPE_E_CIRCULARTYPE :: HRESULT
- tYPE_E_DLLFUNCTIONNOTFOUND :: HRESULT
- tYPE_E_DUPLICATEID :: HRESULT
- tYPE_E_ELEMENTNOTFOUND :: HRESULT
- tYPE_E_FIELDNOTFOUND :: HRESULT
- tYPE_E_INCONSISTENTPROPFUNCS :: HRESULT
- tYPE_E_INVALIDID :: HRESULT
- tYPE_E_INVALIDSTATE :: HRESULT
- tYPE_E_INVDATAREAD :: HRESULT
- tYPE_E_IOERROR :: HRESULT
- tYPE_E_LIBNOTREGISTERED :: HRESULT
- tYPE_E_NAMECONFLICT :: HRESULT
- tYPE_E_OUTOFBOUNDS :: HRESULT
- tYPE_E_QUALIFIEDNAMEDISALLOWED :: HRESULT
- tYPE_E_REGISTRYACCESS :: HRESULT
- tYPE_E_SIZETOOBIG :: HRESULT
- tYPE_E_TYPEMISMATCH :: HRESULT
- tYPE_E_UNDEFINEDTYPE :: HRESULT
- tYPE_E_UNKNOWNLCID :: HRESULT
- tYPE_E_UNSUPFORMAT :: HRESULT
- tYPE_E_WRONGTYPEKIND :: HRESULT
- vIEW_E_DRAW :: HRESULT
- vIEW_E_FIRST :: HRESULT
- vIEW_E_LAST :: HRESULT
- vIEW_S_ALREADY_FROZEN :: HRESULT
- vIEW_S_FIRST :: HRESULT
- vIEW_S_LAST :: HRESULT
Documentation
catchComException :: IO a -> (Com_Exception -> IO a) -> IO a Source #
act
performs the
IO action catchComException
(ex -> hdlr ex)act
, but catches any IO or COM exceptions ex
,
passing them to the handler hdlr
.
type Com_Exception = Either IOException ComException Source #
Com_Exception
is either an IOException
or ComException
;
no attempt is made to embed one inside the other.
throwIOComException :: Com_Exception -> IO a Source #
throwIOComException ex
raises/throws the exception ex
;
ex
is either an IOException
or a ComException
.
check2HR :: HRESULT -> IO () Source #
check2HR hr
triggers a COM exception if the HRESULT
hr
represent an error condition. The current last error
value embedded in the exception gives more information about
cause.
checkBool :: Int32 -> IO () Source #
checkBool mbZero
raises a COM exception if mbZero
is equal
to...zero. The last error is embedded inside the exception.
returnHR :: IO () -> IO HRESULT Source #
returnHR act
runs the IO action act
, catching any
COM exceptions. Success or failure is then mapped back into
the corresponding HRESULT. In the case of success, s_OK
.
isCoError :: Com_Exception -> Bool Source #
isCoError e
returns True
for COM exceptions; False
for IO exception values.
coGetException :: Com_Exception -> Maybe ComException Source #
coGetException ei
picks out the COM exception ei
, if one.
coGetErrorHR :: Com_Exception -> Maybe HRESULT Source #
coGetException ei
picks out the COM HRESULT from the exception, if any.
coGetErrorString :: Com_Exception -> String Source #
coGetException ei
returns a user-friendlier representation of the ei
exception.
printComError :: Com_Exception -> IO () Source #
hresultToString :: HRESULT -> IO String Source #
An alias to coGetErrorString
.
coFail :: String -> IO a Source #
coFail msg
raised the E_FAIL
COM exception along with
the descriptive string msg
.
winErrorToHR :: Int32 -> HRESULT Source #
hRESULT_CODE :: HRESULT -> Int32 Source #
hRESULT_FACILITY :: HRESULT -> Int32 Source #
hRESULT_SEVERITY :: HRESULT -> Int32 Source #
cAT_E_LAST :: HRESULT Source #
cO_E_FIRST :: HRESULT Source #
cO_S_FIRST :: HRESULT Source #
dV_E_TYMED :: HRESULT Source #
mK_E_FIRST :: HRESULT Source #
mK_S_FIRST :: HRESULT Source #
oLE_E_ADVF :: HRESULT Source #
oLE_E_LAST :: HRESULT Source #
oLE_S_LAST :: HRESULT Source #