Better still, could you add a section to that page about DLLs and Excel? That'd be useful for others.
Simon From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Olivier Boudry Sent: 30 November 2007 18:09 To: glasgow-haskell-users@haskell.org Subject: Re: GHC generated dll makes Excel crash on exit. Sorry if I'm talking to myself, but I found a solution and thought it could be interesting for other people who need to call GHC created DLLs from Excel. The solution is based on the information found in : http://haskell.org/haskellwiki/GHC/Using_the_FFI#Debugging_Haskell_DLLs. As suggested, I added two extra functions in my dllMain.c file (adder_Begin, adder_End) and removed the startupHaskell call from the dllMain function. adder_Begin contains the startupHaskell call and adder_End the shutdownHaskell. dllMain just returns true. I also adapted the Excel VBA code to call adder_Begin on a WorkBook_Open event and adder_End on a WorkBook_BeforeClose event. The VBA looks like this: Public functions in a new "Module1" module (cannot declare Public functions in the ThisWorkbook module): Public Declare Function adder Lib " adder.dll" Alias "[EMAIL PROTECTED]" (ByVal x As Long, ByVal y As Long) As Long Public Declare Function adder_Begin Lib "adder.dll" () As Boolean Public Declare Sub adder_End Lib "adder.dll" () Private functions the the "ThisWorkbook" module: Private Sub Workbook_BeforeClose(Cancel As Boolean) adder_End End Sub Private Sub Workbook_Open() adder_Begin End Sub The GHC dllMain.c looks like this: #include <windows.h> #include <Rts.h> #define __ADDER_DLL_EXPORT #define ADDER_API _declspec(dllexport) extern void __stginit_Adder(void); static char* args[] = { "ghcDll", NULL }; /* N.B. argv arrays must end with NULL */ BOOL STDCALL DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ return TRUE; } ADDER_API BOOL adder_Begin(){ startupHaskell(1, args, __stginit_Adder); return HS_BOOL_TRUE; } ADDER_API void adder_End(){ shutdownHaskell(); } If somebody wants the code and Excel file, just ask, I'll be happy to provide it. Thanks, Olivier.
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users