From: Francois F. <fra...@en...> - 2003-06-02 18:15:12
|
Hello there, I have a DLL which uses a shared data section, which I want to initialize the first time the DLL is loaded. Thus my file looks like the following: --8<------------------------- #pragma data_seg("shared") ATOM g_aPropName = 0; int g_iProcessCount = 0; #pragma data_seg() . . . BOOL APIENTRY DllMain( HANDLE /*hModule*/, DWORD ul_reason_for_call, LPVOID /*lpReserved*/ ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: if (g_iProcessCount == 0) g_aPropName = GlobalAddAtom("my global atom"); g_iProcessCount++; break; case DLL_PROCESS_DETACH: g_iProcessCount--; if (g_iProcessCount == 0) GlobalDeleteAtom(g_aPropName); break; } return TRUE; } ------------------------->8-- Using the latest MingW, I compile it using the following command: g++ -shared -o HookDLL.dll HookDLL.o -g However, when I load the library (using LoadLibrary()), the library is loaded properly but the DllMain() entry point is not called... What am I missing ? By the way, am I using the correct way to get a shared data section ? Regards, -- Francois Ferrand |
From: Greg C. <chi...@mi...> - 2003-06-02 21:25:08
|
Francois Ferrand wrote: [...] > However, when I load the library (using LoadLibrary()), the library is > loaded properly but the DllMain() entry point is not called... What if you use BOOL WINAPI DllEntryPoint(HINSTANCE, DWORD, LPVOID) instead? |
From: Francois F. <fra...@en...> - 2003-06-02 21:36:51
|
> > What if you use > BOOL WINAPI DllEntryPoint(HINSTANCE, DWORD, LPVOID) > instead? > This has no impact. The code is still not executed.... |
From: Roger K. W. <ROG...@sa...> - 2003-06-02 22:01:36
|
Francois Ferrand wrote: >>What if you use >> BOOL WINAPI DllEntryPoint(HINSTANCE, DWORD, LPVOID) >>instead? >> >> >> > >This has no impact. The code is still not executed.... > > > > >------------------------------------------------------- >This SF.net email is sponsored by: eBay >Get office equipment for less on eBay! >http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5 >_______________________________________________ >MinGW-users mailing list >Min...@li... > >You may change your MinGW Account Options or unsubscribe at: >https://lists.sourceforge.net/lists/listinfo/mingw-users > > > > FWIW we use: BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) on gcc 2.95.2. It seems to work ok hope this helps -- Roger Wells, P.E. SAIC 221 Third St Newport, RI 02840 401-847-4210 (voice) 401-849-1585 (fax) ro...@mt... |
From: Heiko G. <hg...@te...> - 2003-06-02 22:35:56
|
On Monday 02 June 2003 20:09, Francois Ferrand wrote: > Hello there, > > I have a DLL which uses a shared data section, which I want to > initialize the first time the DLL is loaded. > > Thus my file looks like the following: [snip] > > BOOL APIENTRY DllMain( HANDLE /*hModule*/, > DWORD ul_reason_for_call, > LPVOID /*lpReserved*/ > ) try: extern "C" BOOL APIENTRY DllMain ... Since you are using g++ the DllMain will never be found on startup because of name mangling. Greetings Heiko |
From: Francois F. <fra...@en...> - 2003-06-02 22:51:57
|
> > try: > extern "C" > BOOL APIENTRY DllMain ... > > Since you are using g++ the DllMain will never be found on > startup because > of name mangling. > Yep, that does the trick ! Thanks ! However, shouldn't G++ handle this automatically ? Is this supposed to happen sometime in the near or not so near futur ? |
From: Heiko G. <hg...@te...> - 2003-06-02 23:30:12
|
On Tuesday 03 June 2003 00:36, Francois Ferrand wrote: > > try: > > extern "C" > > BOOL APIENTRY DllMain ... > > > > Since you are using g++ the DllMain will never be found on > > startup because > > of name mangling. > > Yep, that does the trick ! Thanks ! > > However, shouldn't G++ handle this automatically ? Is this supposed to > happen sometime in the near or not so near futur ? You could use the gcc way to handle dll init code. Declare two functions like: static void MyStartupFunc(void) __attribute__((constructor)); void MyStartupFunc(void) { // your code } static void MyExitFunc(void) __attribute__((destructor)); void MyExitFunc(void) { // your code } See __attribute__ in the gcc manual or in the mingw archives. Greetings Heiko |
From: Earnie B. <ear...@ya...> - 2003-06-03 10:43:54
|
Francois Ferrand wrote: >>try: >>extern "C" >>BOOL APIENTRY DllMain ... >> >>Since you are using g++ the DllMain will never be found on >>startup because >>of name mangling. >> > > > Yep, that does the trick ! Thanks ! > > However, shouldn't G++ handle this automatically ? Is this supposed to > happen sometime in the near or not so near futur ? > The standard says that you must declare the function as ``extern "C"'' if that is the interface that is to be used. What's to handle automatically? Earnie. |
From: Francois F. <fra...@en...> - 2003-06-03 10:47:39
|
> > The standard says that you must declare the function as > ``extern "C"'' > if that is the interface that is to be used. What's to handle > automatically? > Not having to declare as '' extern "C" '', as can be done with other compilers... (don't say I'm lazy :p) Regards, -- Francois Ferrand |
From: Earnie B. <ear...@ya...> - 2003-06-03 11:11:35
|
Francois Ferrand wrote: >>The standard says that you must declare the function as >>``extern "C"'' >>if that is the interface that is to be used. What's to handle >>automatically? >> > > > Not having to declare as '' extern "C" '', as can be done with other > compilers... > (don't say I'm lazy :p) > What other compilers? Earnie. |
From: <dan...@ya...> - 2003-06-03 20:49:22
|
--- Earnie Boyd <ear...@ya...> wrote: > Francois Ferrand wrote: > >>The standard says that you must declare the function as > >>``extern "C"'' > >>if that is the interface that is to be used. What's to handle > >>automatically? > >> > > > > > > Not having to declare as '' extern "C" '', as can be done with other > > compilers... > > (don't say I'm lazy :p) > > > > What other compilers? GNUC, if the prototype is in a system header and you don't: /* Don't assume anything about the header files. */ #define NO_IMPLICIT_EXTERN_C as a target macro when building GCC, mingw does define the macro. Danny > > Earnie. http://mobile.yahoo.com.au - Yahoo! Mobile - Check & compose your email via SMS on your Telstra or Vodafone mobile. |
From: Francois F. <fra...@en...> - 2003-06-03 20:56:19
|
> > > > What other compilers? > Microsoft's, intel's. I did not try others. |