[Haskell-cafe] Why am I not allowed to use CStringLen inforeignexport?

Brian Hulley brianh at metamilk.com
Fri Sep 22 13:03:01 EDT 2006

Andreas Marth wrote:
> Thanks a lot for this information it helped a lot.

Glad to be of help.

> I am thinking about creating a wikipage about Haskell<->VBA
> interfacing through a DLL.
> Is it okay for you if I put your code there?


> I am a bit concerned about the memory. newArray states that the
> memory has to be freed after usage. Is this needed here? How can it
> be done?

One way could be to write a function which creates the BSTR, passes it to a 
function, then deallocates the BSTR before returning eg (untested):

    import Control.Exception (bracket)

    withBSTR8 :: [Char] -> (BSTR8 -> IO a) -> IO a
    withBSTR8 s f =
            (createBSTR8 s)
            (\bstr -> free (bstr `plusPtr` (-4)))
            (\bstr -> f bstr)

Regards, Brian.
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.


More information about the Haskell-Cafe mailing list