[Haskell-cafe] ffi call works fine in ghci but not as ghc compiledsegfault

Miro Karpis miroslav.karpis at gmail.com
Fri Mar 14 23:23:44 UTC 2014


here comes the c definition:

int setmodulestring(char* parameter, int parameterLength, char* value,
int valueLength, int setVarInArray);


In ghci the main and setmodulestring functions works fine



On Sat, Mar 15, 2014 at 12:14 AM, Branimir Maksimovic <
branimir.maksimovic at gmail.com> wrote:

>  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.
>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140315/1a6c19e3/attachment.html>


More information about the Haskell-Cafe mailing list