it depends. DllMain is called each time the dll is loaded or unloaded. By default mirc unloads the dll after your call (/dll etc...) however you can use LoadDll (as well as UnloadDll) to instruct mirc to keep the dll loaded. this will play into the other question.
Ya just create a global HINSTANCE for your dll handle just remember to keep the dll loaded (globals go out of scope otherwise)