Каждое приложение Win32 должно иметь точку входа (обычно WinMain). Таким образом, вы не можете поместить точку входа в DLL, потому что она не является частью EXE. Однако точка входа может находиться в статически связанной библиотеке. Когда статическая библиотека становится связанной, точка входа становится частью EXE.
Но я предлагаю избежать всей этой сложности. Просто заставьте пользователей вашей DLL вызывать что-то вроде этого:
int WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow )
{
return WrapperDllMain( hInstance, hPrev, lpCmdLine, nCmdShow, &user_main );
}
Код прост и легок в написании. Это не так много усилий со стороны пользователей DLL. Вы имеете полный контроль над циклом сообщений (и всем временем жизни процесса).