{-# LINE 1 "libraries\\Win32\\System\\Win32\\DLL.hsc" #-}
{-# LINE 2 "libraries\\Win32\\System\\Win32\\DLL.hsc" #-}
{-# LANGUAGE Safe #-}
{-# LINE 6 "libraries\\Win32\\System\\Win32\\DLL.hsc" #-}
module System.Win32.DLL
( disableThreadLibraryCalls
, freeLibrary
, getModuleFileName
, getModuleHandle
, getProcAddress
, loadLibrary
, loadLibraryEx
, setDllDirectory
, LoadLibraryFlags
, lOAD_LIBRARY_AS_DATAFILE
, lOAD_WITH_ALTERED_SEARCH_PATH
) where
import System.Win32.Types
import Foreign
import Foreign.C
import Data.Maybe (fromMaybe)
#include "windows_cconv.h"
disableThreadLibraryCalls :: HMODULE -> IO ()
disableThreadLibraryCalls hmod =
failIfFalse_ "DisableThreadLibraryCalls" $ c_DisableThreadLibraryCalls hmod
foreign import WINDOWS_CCONV unsafe "windows.h DisableThreadLibraryCalls"
c_DisableThreadLibraryCalls :: HMODULE -> IO Bool
freeLibrary :: HMODULE -> IO ()
freeLibrary hmod =
failIfFalse_ "FreeLibrary" $ c_FreeLibrary hmod
foreign import WINDOWS_CCONV unsafe "windows.h FreeLibrary"
c_FreeLibrary :: HMODULE -> IO Bool
getModuleFileName :: HMODULE -> IO String
getModuleFileName hmod =
allocaArray 512 $ \ c_str -> do
failIfFalse_ "GetModuleFileName" $ c_GetModuleFileName hmod c_str 512
peekTString c_str
foreign import WINDOWS_CCONV unsafe "windows.h GetModuleFileNameW"
c_GetModuleFileName :: HMODULE -> LPTSTR -> Int -> IO Bool
getModuleHandle :: Maybe String -> IO HMODULE
getModuleHandle mb_name =
maybeWith withTString mb_name $ \ c_name ->
failIfNull "GetModuleHandle" $ c_GetModuleHandle c_name
foreign import WINDOWS_CCONV unsafe "windows.h GetModuleHandleW"
c_GetModuleHandle :: LPCTSTR -> IO HMODULE
getProcAddress :: HMODULE -> String -> IO Addr
getProcAddress hmod procname =
withCAString procname $ \ c_procname ->
failIfNull "GetProcAddress" $ c_GetProcAddress hmod c_procname
foreign import WINDOWS_CCONV unsafe "windows.h GetProcAddress"
c_GetProcAddress :: HMODULE -> LPCSTR -> IO Addr
loadLibrary :: String -> IO HINSTANCE
loadLibrary name =
withTString name $ \ c_name ->
failIfNull "LoadLibrary" $ c_LoadLibrary c_name
foreign import WINDOWS_CCONV unsafe "windows.h LoadLibraryW"
c_LoadLibrary :: LPCTSTR -> IO HINSTANCE
type LoadLibraryFlags = DWORD
lOAD_LIBRARY_AS_DATAFILE :: LoadLibraryFlags
lOAD_LIBRARY_AS_DATAFILE = 2
lOAD_WITH_ALTERED_SEARCH_PATH :: LoadLibraryFlags
lOAD_WITH_ALTERED_SEARCH_PATH = 8
{-# LINE 92 "libraries\\Win32\\System\\Win32\\DLL.hsc" #-}
loadLibraryEx :: String -> HANDLE -> LoadLibraryFlags -> IO HINSTANCE
loadLibraryEx name h flags =
withTString name $ \ c_name ->
failIfNull "LoadLibraryEx" $ c_LoadLibraryEx c_name h flags
foreign import WINDOWS_CCONV unsafe "windows.h LoadLibraryExW"
c_LoadLibraryEx :: LPCTSTR -> HANDLE -> LoadLibraryFlags -> IO HINSTANCE
setDllDirectory :: Maybe String -> IO ()
setDllDirectory name =
maybeWith withTString name $ \ c_name ->
failIfFalse_ (unwords ["SetDllDirectory", fromMaybe "NULL" name]) $ c_SetDllDirectory c_name
foreign import WINDOWS_CCONV unsafe "windows.h SetDllDirectoryW"
c_SetDllDirectory :: LPTSTR -> IO BOOL