{-# LINE 1 "System\\Win32\\WindowsString\\DLL.hsc" #-}----------------------------------------------------------------------------- -- | -- Module : System.Win32.DLL -- Copyright : (c) Alastair Reid, 1997-2003 -- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : Esa Ilari Vuokko <ei@vuokko.info> -- Stability : provisional -- Portability : portable -- -- A collection of FFI declarations for interfacing with Win32. -- ----------------------------------------------------------------------------- moduleSystem.Win32.WindowsString.DLL(moduleSystem.Win32.WindowsString.DLL ,moduleSystem.Win32.DLL )whereimportSystem.Win32.DLL hiding(disableThreadLibraryCalls ,freeLibrary ,getModuleFileName ,getModuleHandle ,getProcAddress ,loadLibrary ,loadLibraryEx ,setDllDirectory ,lOAD_LIBRARY_AS_DATAFILE ,lOAD_WITH_ALTERED_SEARCH_PATH )importSystem.Win32.DLL.Internal importSystem.Win32.WindowsString.Types importForeignimportData.Maybe(fromMaybe)importSystem.OsString.Windows importGHC.IO.Encoding.UTF16(mkUTF16le)importGHC.IO.Encoding.Failure(CodingFailureMode(..))getModuleFileName ::HMODULE ->IOWindowsString getModuleFileName :: HMODULE -> IO WindowsString getModuleFileName HMODULE hmod =Int -> (Ptr TCHAR -> IO WindowsString) -> IO WindowsString forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b allocaArrayInt 512((Ptr TCHAR -> IO WindowsString) -> IO WindowsString) -> (Ptr TCHAR -> IO WindowsString) -> IO WindowsString forall a b. (a -> b) -> a -> b $\Ptr TCHAR c_str ->doString -> IO Bool -> IO () failIfFalse_ String "GetModuleFileName"(IO Bool -> IO ()) -> IO Bool -> IO () forall a b. (a -> b) -> a -> b $HMODULE -> Ptr TCHAR -> Int -> IO Bool c_GetModuleFileName HMODULE hmod Ptr TCHAR c_str Int 512Ptr TCHAR -> IO WindowsString peekTString Ptr TCHAR c_str getModuleHandle ::MaybeWindowsString ->IOHMODULE getModuleHandle :: Maybe WindowsString -> IO HMODULE getModuleHandle Maybe WindowsString mb_name =(WindowsString -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE) -> Maybe WindowsString -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a b c. (a -> (Ptr b -> IO c) -> IO c) -> Maybe a -> (Ptr b -> IO c) -> IO c maybeWithWindowsString -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a. WindowsString -> (Ptr TCHAR -> IO a) -> IO a withTString Maybe WindowsString mb_name ((Ptr TCHAR -> IO HMODULE) -> IO HMODULE) -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a b. (a -> b) -> a -> b $\Ptr TCHAR c_name ->String -> IO HMODULE -> IO HMODULE forall a. String -> IO (Ptr a) -> IO (Ptr a) failIfNull String "GetModuleHandle"(IO HMODULE -> IO HMODULE) -> IO HMODULE -> IO HMODULE forall a b. (a -> b) -> a -> b $Ptr TCHAR -> IO HMODULE c_GetModuleHandle Ptr TCHAR c_name loadLibrary ::WindowsString ->IOHMODULE loadLibrary :: WindowsString -> IO HMODULE loadLibrary WindowsString name =WindowsString -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a. WindowsString -> (Ptr TCHAR -> IO a) -> IO a withTString WindowsString name ((Ptr TCHAR -> IO HMODULE) -> IO HMODULE) -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a b. (a -> b) -> a -> b $\Ptr TCHAR c_name ->String -> IO HMODULE -> IO HMODULE forall a. String -> IO (Ptr a) -> IO (Ptr a) failIfNull String "LoadLibrary"(IO HMODULE -> IO HMODULE) -> IO HMODULE -> IO HMODULE forall a b. (a -> b) -> a -> b $Ptr TCHAR -> IO HMODULE c_LoadLibrary Ptr TCHAR c_name loadLibraryEx ::WindowsString ->HANDLE ->LoadLibraryFlags ->IOHMODULE loadLibraryEx :: WindowsString -> HMODULE -> LoadLibraryFlags -> IO HMODULE loadLibraryEx WindowsString name HMODULE h LoadLibraryFlags flags =WindowsString -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a. WindowsString -> (Ptr TCHAR -> IO a) -> IO a withTString WindowsString name ((Ptr TCHAR -> IO HMODULE) -> IO HMODULE) -> (Ptr TCHAR -> IO HMODULE) -> IO HMODULE forall a b. (a -> b) -> a -> b $\Ptr TCHAR c_name ->String -> IO HMODULE -> IO HMODULE forall a. String -> IO (Ptr a) -> IO (Ptr a) failIfNull String "LoadLibraryEx"(IO HMODULE -> IO HMODULE) -> IO HMODULE -> IO HMODULE forall a b. (a -> b) -> a -> b $Ptr TCHAR -> HMODULE -> LoadLibraryFlags -> IO HMODULE c_LoadLibraryEx Ptr TCHAR c_name HMODULE h LoadLibraryFlags flags setDllDirectory ::MaybeWindowsString ->IO()setDllDirectory :: Maybe WindowsString -> IO () setDllDirectory Maybe WindowsString name =(WindowsString -> (Ptr TCHAR -> IO ()) -> IO ()) -> Maybe WindowsString -> (Ptr TCHAR -> IO ()) -> IO () forall a b c. (a -> (Ptr b -> IO c) -> IO c) -> Maybe a -> (Ptr b -> IO c) -> IO c maybeWithWindowsString -> (Ptr TCHAR -> IO ()) -> IO () forall a. WindowsString -> (Ptr TCHAR -> IO a) -> IO a withTString Maybe WindowsString name ((Ptr TCHAR -> IO ()) -> IO ()) -> (Ptr TCHAR -> IO ()) -> IO () forall a b. (a -> b) -> a -> b $\Ptr TCHAR c_name ->doletnameS :: Maybe String nameS =Maybe WindowsString name Maybe WindowsString -> (WindowsString -> Maybe String) -> Maybe String forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>=(EncodingException -> Maybe String) -> (String -> Maybe String) -> Either EncodingException String -> Maybe String forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either(Maybe String -> EncodingException -> Maybe String forall a b. a -> b -> a constMaybe String forall a. Maybe a Nothing)String -> Maybe String forall a. a -> Maybe a Just(Either EncodingException String -> Maybe String) -> (WindowsString -> Either EncodingException String) -> WindowsString -> Maybe String forall b c a. (b -> c) -> (a -> b) -> a -> c .TextEncoding -> WindowsString -> Either EncodingException String decodeWith (CodingFailureMode -> TextEncoding mkUTF16leCodingFailureMode TransliterateCodingFailure)String -> IO Bool -> IO () failIfFalse_ ([String] -> String unwords[String "SetDllDirectory",String -> Maybe String -> String forall a. a -> Maybe a -> a fromMaybeString "NULL"Maybe String nameS ])(IO Bool -> IO ()) -> IO Bool -> IO () forall a b. (a -> b) -> a -> b $Ptr TCHAR -> IO Bool c_SetDllDirectory Ptr TCHAR c_name