System/Win32/String.hs
{- |
Module : System.Win32.String
Copyright : 2013 shelarcy
License : BSD-style
Maintainer : shelarcy@gmail.com
Stability : Provisional
Portability : Non-portable (Win32 API)
Utilities for primitive marshalling of Windows' C strings.
-}
module System.Win32.String
( LPSTR, LPCSTR, LPWSTR, LPCWSTR
, TCHAR, LPTSTR, LPCTSTR, LPCTSTR_
, withTString, withTStringLen, peekTString, peekTStringLen
, newTString
, withTStringBuffer, withTStringBufferLen
) where
import System.Win32.Types
-- | Marshal a dummy Haskell string into a NUL terminated C wide string
-- using temporary storage.
--
-- * the Haskell string is created by length parameter. And the Haskell
-- string contains /only/ NUL characters.
--
-- * the memory is freed when the subcomputation terminates (either
-- normally or via an exception), so the pointer to the temporary
-- storage must /not/ be used after this.
--
withTStringBuffer :: Int -> (LPTSTR -> IO a) -> IO a
withTStringBuffer maxLength
= let dummyBuffer = replicate maxLength '\0'
in withTString dummyBuffer
-- | Marshal a dummy Haskell string into a C wide string (i.e. wide
-- character array) in temporary storage, with explicit length
-- information.
--
-- * the Haskell string is created by length parameter. And the Haskell
-- string contains /only/ NUL characters.
--
-- * the memory is freed when the subcomputation terminates (either
-- normally or via an exception), so the pointer to the temporary
-- storage must /not/ be used after this.
--
withTStringBufferLen :: Int -> ((LPTSTR, Int) -> IO a) -> IO a
withTStringBufferLen maxLength
= let dummyBuffer = replicate maxLength '\0'
in withTStringLen dummyBuffer