[Haskell-beginners] help with FFI: passing char* to dll function + pointer freeing

Miro Karpis miroslav.karpis at gmail.com
Sat Sep 21 14:55:58 CEST 2013


thanks,.. so far I came to this. I can compile it but not getting the right
values from the method. Most probably some problem with the pointers...


----------------
--int setmoduletable(char *param, int length, double array[], int UB1, int
UB2, bool isValid);


foreign import stdcall unsafe "setmoduletable"  c_setmoduletable :: Ptr
Char

                          -> Int

                          -> Ptr (Double)

                          -> Int

                          -> Int

                          -> Bool

                          -> IO Int

main = do
  let param = "Input_Bit_Nozz"
  let paramLength = length param
      realTable = [ 0.0111125, 0.0111125, 0.009525] :: [Double]
      ub1 = 0
      ub2 = 2
      isValid = False
  realTablePtr <- newArray realTable
  paramPtr <- newArray param
  x <- c_setmoduletable paramPtr paramLength realTablePtr ub1 ub2 isValid
  free realTablePtr
  free paramPtr
  putStrLn $ "c_setmoduletable output: " ++ show x
  putStrLn "Done"







On Sat, Sep 21, 2013 at 1:06 AM, Brandon Allbery <allbery.b at gmail.com>wrote:

> On Fri, Sep 20, 2013 at 6:53 PM, Miro Karpis <miroslav.karpis at gmail.com>wrote:
>
>> Please, I just can not figure this out:
>>
>> I have a method in my C dll:
>> int somemethod(char *param, int length, double array[], int UB1, int UB2,
>> bool isValid);
>>
>> I would like to use this method in Haskell, so I have defined it like:
>>
>> foreign import stdcall unsafe "somemethod"  c_somemethod :: Ptr CString
>>
>
> You don't want Ptr CString.  See:
>
>     Prelude> :m +Foreign.C.String
>     Prelude Foreign.C.String> :i CString
>     type CString = GHC.Ptr.Ptr Foreign.C.Types.CChar
>   -- Defined in `Foreign.C.String'
>
> In other words, CString is an alias for Ptr CChar. Ptr CString corresponds
> to (char **), not (char *).
>
> --
> brandon s allbery kf8nh                               sine nomine
> associates
> allbery.b at gmail.com
> ballbery at sinenomine.net
> unix, openafs, kerberos, infrastructure, xmonad
> http://sinenomine.net
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130921/40773752/attachment.htm>


More information about the Beginners mailing list