Calling ghc dll's with MSVC++ code
Kevin S. Millikin
kmillikin@atcorp.com
Fri, 31 Jan 2003 12:51:56 -0600
>>>>> "Sigbjorn" == Sigbjorn Finne <sof@galois.com> writes:
Sigbjorn> That's the system trap interrupt (i.e., transition to
Sigbjorn> ring 0 / kernel mode to perform a system call/service.)
Thanks! I've learned more about Windows and DLLs in a few days than I
ever expected or wanted to. The problem appears to be related to
http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b153867
and
http://support.microsoft.com/default.aspx?scid=kb%3bEN-US%3b142243
int 0x2e is (presumably) an attempt to attach to the (my) DLL.
DllMain is (by design) not reentrant. An attempt to create a thread
from DllMain would attach to the DLL, calling DllMain with a reason of
DLL_THREAD_ATTACH. This latter call will hang until the original call
returns (which will never happen, now). timeSetEvent creates a new
thread; and the callback is in the same DLL as the call to
startupHaskell.
The workaround appears to be to not put code that might possibly
create a new thread (that needs the DLL) in DllMain; instead such code
should go in an initialization function that is called after DllMain
returns.
I'll test it out and post code that corrects the example from the
User's Guide.
--
Kevin S. Millikin Architecture Technology Corporation
Research Scientist Specialists in Computer Architecture
(952)829-5864 x. 162 http://www.atcorp.com