Preventing multiple instance creation in DLL
-
Hello, I am working on a Dll that can't create more than one thread instance and thus would like to know what I can do to prevent that from happening. Thank you. Dave
-
Hello, I am working on a Dll that can't create more than one thread instance and thus would like to know what I can do to prevent that from happening. Thank you. Dave
dNimrod#X wrote: ...a Dll that can't create more than one thread instance... Are you wanting only one instance of the DLL to exist, or are you wanting the DLL to only be able to create one thread, or is the DLL failing to create more than one thread and you want to know how to create additional threads?
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
-
dNimrod#X wrote: ...a Dll that can't create more than one thread instance... Are you wanting only one instance of the DLL to exist, or are you wanting the DLL to only be able to create one thread, or is the DLL failing to create more than one thread and you want to know how to create additional threads?
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
I also don't understand what this guy wants from us. It is very unclear. Are you meaning that you just want one thread created by the dll for every process, or do you mean only one thread for the whole system? Don't try it, just do it! ;-)
-
dNimrod#X wrote: ...a Dll that can't create more than one thread instance... Are you wanting only one instance of the DLL to exist, or are you wanting the DLL to only be able to create one thread, or is the DLL failing to create more than one thread and you want to know how to create additional threads?
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
I'm sorry if I wasn't clear enough... Allow me to explain what I need to do: I have to create a Dll, which is loaded at startup time and should be accessible by any application. Among many different features, this Dll creates a kind of console for output purposes only. So, all applications loading the Dll, can get direct access to this "output console" (and other features.) My problem is I can't let the Dll get duplicated each time an app loads it. This is why I am asking you for your help as I have never attempted to do this in a Dll. Actually I have never had this need before. What would you suggest me to do? Dave BTW: Perhaps I can prevent this from happening if all the applications use
GetModuleHandle
, instead of loading them? -
I'm sorry if I wasn't clear enough... Allow me to explain what I need to do: I have to create a Dll, which is loaded at startup time and should be accessible by any application. Among many different features, this Dll creates a kind of console for output purposes only. So, all applications loading the Dll, can get direct access to this "output console" (and other features.) My problem is I can't let the Dll get duplicated each time an app loads it. This is why I am asking you for your help as I have never attempted to do this in a Dll. Actually I have never had this need before. What would you suggest me to do? Dave BTW: Perhaps I can prevent this from happening if all the applications use
GetModuleHandle
, instead of loading them?Hi Am not sure if it will work or if its the correct way. Created a shared variable, so that this variable will be shared among the all the loaded Dll. #pragma data_seg(".DAT") int NumberofInstance 0 #pragma data_seg() .. .. NumberofInstance++; if(NumberofInstance>1) { Dont load the DLL. } in the Def file add this SECTIONS .DAT Read Write Shared Hope this will help you. Regards Mohamed Shiraz The Best Relligion is Science. Once you understand it, you will know God.
-
I'm sorry if I wasn't clear enough... Allow me to explain what I need to do: I have to create a Dll, which is loaded at startup time and should be accessible by any application. Among many different features, this Dll creates a kind of console for output purposes only. So, all applications loading the Dll, can get direct access to this "output console" (and other features.) My problem is I can't let the Dll get duplicated each time an app loads it. This is why I am asking you for your help as I have never attempted to do this in a Dll. Actually I have never had this need before. What would you suggest me to do? Dave BTW: Perhaps I can prevent this from happening if all the applications use
GetModuleHandle
, instead of loading them?check if this console window exists from DllMain and create it if now. Then create an API for writing text on that window. The API should get the window handle from the console window and send messages to it which are processed then in the process context that created the window. Don't try it, just do it! ;-)
-
Hi Am not sure if it will work or if its the correct way. Created a shared variable, so that this variable will be shared among the all the loaded Dll. #pragma data_seg(".DAT") int NumberofInstance 0 #pragma data_seg() .. .. NumberofInstance++; if(NumberofInstance>1) { Dont load the DLL. } in the Def file add this SECTIONS .DAT Read Write Shared Hope this will help you. Regards Mohamed Shiraz The Best Relligion is Science. Once you understand it, you will know God.
Hi and thanks for the reply! That is exactly what I need to do. I would have accomplished it by now if it wasn't for one thing: this Dll of mine has MFC support and thus I don't have access to the
DllMain
procedure! I do have access toCWinApp::InitInstance
. How can I prevent the Dll from loading twice? Perhaps I'm just confusing (and confused) with all this Dll business...