Problem exporting Haskell to C via a DLL in GHC 6.6

Brian Hulley brianh at
Tue Feb 6 04:31:19 EST 2007

SevenThunders wrote:
> Before I post this as a bug, I thought I'd check to make sure I'm not
> doing something wrong.
> DllMain
>   ( HANDLE hModule
>   , DWORD reason
>   , void* reserved
>   )
> {
>  if (reason == DLL_PROCESS_ATTACH) {
>      /* By now, the RTS DLL should have been hoisted in, but we need
> to start it up. */
>      startupHaskell(1, args, __stginit_Bad);
>      return TRUE;
>  }
>  if (reason == DLL_PROCESS_DETACH) {
>        shutdownHaskell();
>        return TRUE;
>  }
>  return TRUE;
> }

The above *may* be the problem: it is unsafe to do anything in DllMain that 
may involve loading a DLL, (which therefore includes a lot of the standard 
platform sdk functions, some of which Haskell may need to use to 
start/sthurdown) because the order in which DllMain is called when Windows 
loads/unloads DLLs is undefined - see platform sdk docs for more info.

Instead of trying to start/shutdown Haskell from DllMain, I'd export a 
Begin() and End() function from the DLL and explicitly call these from your 
application's main().

Hope this helps,

More information about the Glasgow-haskell-users mailing list