[Haskell-cafe] ffi call works fine in ghci but not as ghc compiledsegfault
Branimir Maksimovic
branimir.maksimovic at gmail.com
Fri Mar 14 23:14:24 UTC 2014
On 03/14/2014 11:24 PM, Miroslav Karpis wrote:
> Hi, please can you help me with following?
>
> I have a call to an external dll (via ffi) which if executed from ghci
> works fine.
> If I compile my code with 'ghc -o fm Mycode.hs -L. -lextdll' and run
> it I get 'Segmentation fault/access violation in generated code'.
>
>
>
> main = do
> let param = "FilePath"
> let value = "C:/dev/misc/haskell/services/FM"
> result <- liftIO $ FM.setmodulestring param value
> return "done"
>
> setmodulestring :: String -> String -> IO CInt
> setmodulestring param value = do
> let cParamLength = fromIntegral $ length param ::CInt
> cValueLength = fromIntegral $ length value ::CInt
> setVarInArray = (-1)::CInt
> alloca $ \cParam -> do
> alloca $ \cValue -> do
> result <- c_setmodulestring cParam cParamLength cValue cValueLength
> setVarInArray
> return result
>
This does not seems correct (or incomplete).
> If I try also with following, the behaviour is the same:
>
> setmodulestring2 :: String -> String -> IO CInt
> setmodulestring2 param value = do
> cParam <- newCWString param
> cValue <- newCWString value
> let cParamLength = fromIntegral $ length param ::CInt
> cValueLength = fromIntegral $ length value ::CInt
> setVarInArray = (-1)::CInt
> result <- c_setmodulestring cParam cParamLength cValue cValueLength
> setVarInArray
> free cParam
> free cValue
> return res
>
This one may be correct but without, seeing C code (where it probably
segfaults) I cannot say anything further.
exact ffi declaration of c_setmodulestring would be usefull, too,
to compare with C function.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140315/3b0e1ace/attachment.html>
More information about the Haskell-Cafe
mailing list