Subject: Re: Initialising gnuwin DLLs
From: [email-masked] (Fergus Henderson)

3 Feb 1998 22:25:52 -0800
Message-ID: <[email-masked]>
References: <[email-masked]>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
To: Matthew Brett <[email-masked]>
Cc: [email-masked]

On 03-Feb-1998, Matthew Brett <[email-masked]> wrote:
> Dear Mikey,
> 
> "struct _reent for each dll needs to be initialized from
> main() before any calls to dll funcs that use the
> std file handles, see the perl5 patch for details."
> 
> Thanks for this reply.  Does this mean that for any program
> to use a gnuwin generated DLL, main() needs to know that it is
> a gnuwin DLL and initialise struct _reent?  This would mean 
> that you could not use gnuwin DLLs with code that did not
> know about _reent, I guess.  Could you not can you not 
> intialise _reent from the DLL code - e.g in the
> PROCESS_ATTACH routine - to initialise the Cygwin DLL from
> our new DLL?
>
> Does anyone have some skeletal code that does this?

Well, you can initialize each DLL's _impure_ptr so that
it points to reent_data -- this at least lets you use gnuwin
generated DLLs in gnuwin programs without main() needing to
jump through special hoops.  Of course, that won't initialize
the reent_data itself; I don't know if it's possible to do that
from within the dll_entry() function.

From Makefile.DLLs version 0.6 (see
<http://www.cs.mu.oz.au/~fjh/gnu-win32/how-to-build-dlls.html>):

# Windows requires each DLL to have an initialization function
# that is called at certain points (thread/process attach/detach).
# This one just initializes `_impure_ptr'.
dll_init.c:
	echo '#include <stdio.h>' 				> dll_init.c
	echo 'extern struct _reent *_impure_ptr;'		>> dll_init.c
	echo 'extern struct _reent *__imp_reent_data;'		>> dll_init.c
	echo '__attribute__((stdcall))'				>> dll_init.c
	echo 'int dll_entry(int handle, int reason, void *ptr)'	>> dll_init.c
	echo '{ _impure_ptr=__imp_reent_data; return 1; }'	>> dll_init.c

-- 
Fergus Henderson <[email-masked]>   |  "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh>   |  of excellence is a lethal habit"
PGP: finger [email-masked]         |     -- the last words of T. S. Garp.
-
For help on using this list (especially unsubscribing), send a message to
"[email-masked]" with one line of text: "help".