[Haskell-cafe] Haskell DLL crashes Excel

Kyra kyra at veernet.ru
Fri Sep 22 11:21:30 EDT 2006


Andreas Marth wrote:
> I solved this with adding C:\WINNT\system32\oleaut32.dll to the files the
> linker shold link.
> Was that correct?
I prefer "-loleaut32" but see no big difference.

> Because this dll crashes Excel instantly. I used the code suggested by Esa
> Ilari Vuokko:
> 
> newtype BSTR = BSTR CWString
> 
> foreign import stdcall "oleauto.h SysAllocString" c_SysAllocString ::
> CWString -> IO BSTR
> 
> sysAllocString :: String -> IO BSTR
> sysAllocString s = withCWString s c_SysAllocString >>= return
Have You made your code working with no crash?
Remark: ">>= return" is extraneous (but absolutely harmless) here

>  Regarding the release from the client side:
> If I call a Haskell DLL from Excel shall I release the BSTR within the
> Haskell DLL?
> That would mean before the value is returned?
Nope.
The rule is: if You receive some BSTR from the outside world You must 
release it, if You allocate some BSTR and return it to the outside 
world, it's the outside world's responsibility to release it.


More information about the Haskell-Cafe mailing list