
thanks, but also after changing my CString/newCString to
CWString/newCWString I'm getting the segfault. As I mentioned if I run
the setmodulestring
function from ghci everyting works fine (I get proper return value). The
problem only comes if I call setmodulestring from the main.
I have simplified the main here:
main = do
let param = "FilePath"
let value = "C:/dev/misc/haskell/services/FM"
result <- liftIO $ FM.setmodulestring param value
return "done"
Another strange thing is that I can call another external function from the
'main' function without problem.
On Fri, Mar 14, 2014 at 9:52 PM, Brandon Allbery
On Fri, Mar 14, 2014 at 4:46 PM, Miro Karpis
wrote: setmodulestring :: String -> String -> IO CInt setmodulestring param value = do cParam <- newCString param cValue <- newCString value let cParamLength = fromIntegral $ length param ::CInt cValueLength = fromIntegral $ length value ::CInt setVarInArray = (-1)::CInt result <- c_setmodulestring cParam cParamLength cValue cValueLength setVarInArray return result
The path you show earlier looks like Windows; you probably want CWString for Win32 API functions (so newCWString etc.).
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net