Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 29.11.2022
Сообщений: 1

Создание окна в DLL проекте на C++

29.11.2022, 02:31. Показов 1681. Ответов 9

Студворк — интернет-сервис помощи студентам
При инжекте dll файла создается окно и попросту крашится (не отвечает)

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
        return true;
 
    switch (msg)
    {
    case WM_SIZE:
        if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED)
        {
            g_d3dpp.BackBufferWidth = LOWORD(lParam);
            g_d3dpp.BackBufferHeight = HIWORD(lParam);
            ResetDevice();
        }
        return 0;
        break;
    case WM_SYSCOMMAND:
        if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
            return 0;
        break;
    case WM_DESTROY:
        ::PostQuitMessage(0);
        return 0;
    }
    return ::DefWindowProc(hWnd, msg, wParam, lParam);
}
 
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("Test_class"), NULL };
    ::RegisterClassEx(&wc);
    HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Test"), WS_EX_TRANSPARENT, 800, 50, 620, 387, NULL, NULL, wc.hInstance, NULL);
 
    ::ShowWindow(hwnd, SW_SHOWDEFAULT);
    ::UpdateWindow(hwnd);
 
//тут код, сама суть заключается в том, что окно попросту не отвечает.
 
return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2022, 02:31
Ответы с готовыми решениями:

Создание формы в DLL-проекте
Такой вопрос: можно-ли в проекте библитеки DLL создавать формы, с кнопками, и прочими компонентами полноценной формы, которые будет...

Создание DLL и EXE в одном проекте
Привет всем, я хочу создать большой проект и встала одна очень маленькая проблема, я чтобы не запутаться создал такую систему несколько...

Создание окна из dll
Здравствуйте. Возник вопрос: как создать окно windows, с помощью библиотеки .dll?. Я создал приложение которое создает окно и различные...

9
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
29.11.2022, 08:18
А где цикл выборки сообщений? Забыли добавить GetMessage TranslateMessage DispatchMessage?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
29.11.2022, 09:07
Цитата Сообщение от Замабувараев Посмотреть сообщение
А где цикл выборки сообщений?
А он точно нужен в данном случае? я просто уточняю, точного ответа не знаю.
Но рассуждаю так: раз это dll, которая загружается другим процессом, то в хост-процессе по идее должен быть организован цикл выборки сообщений, его достаточно же, да?

Добавлено через 4 минуты
Цитата Сообщение от xvorost Посмотреть сообщение
//тут код, сама суть заключается в том, что окно попросту не отвечает.
Что значит "тут код"? какой код?
Если этот код не дает выйти из DllMain(), тогда, конечно, Замабувараев прав. Приложение в этот момент не обрабатывает сообщения - вот и "висит".
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
29.11.2022, 14:10
У каждого потока собственная очередь сообщений. Цикл выборки сообщений забирает сообщения только из текущего потока.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
29.11.2022, 14:20
Цитата Сообщение от Замабувараев Посмотреть сообщение
У каждого потока собственная очередь сообщений.
Это понятно. Но где в приведенном коде новый поток?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
29.11.2022, 14:58
Вот здесь: CreateRemoteThread
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
29.11.2022, 15:00
Вообще в DllMain разрешено использовать только минимальный набор функций, и нельзя использовать функции из user32 в том числе. В общем кидай exe c неработающей dll, там видно будет.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
29.11.2022, 15:07
Цитата Сообщение от Замабувараев Посмотреть сообщение
Вот здесь: CreateRemoteThread

Вы явно знаете про код ТС больше меня и больше того, что он опубликовал.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
29.11.2022, 16:17
Вот здесь: CreateRemoteThread
Цитата Сообщение от KSergey9 Посмотреть сообщение
Вы явно знаете про код ТС больше меня и больше того, что он опубликовал.
Ну сказано же:
Цитата Сообщение от xvorost Посмотреть сообщение
При инжекте dll
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
29.11.2022, 16:21
Замабувараев, заинжектить можно в любом потоке. К примеру чтобы попасть в нужный STA нужно грузить либу именно в нужном потоке через хук.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.11.2022, 16:21
Помогаю со студенческими работами здесь

Создание диалогового окна из DLL
Доброго всем времени! Ситуация следующая: Из-за нехватки опыта, для меня пока непонятно, есть ли разница для сабжа в расширении моей...

Создание окна для DLL с UC
Всем доброго времени суток. Есть библиотека с расширениями, в котором описаны команды. И в одной из команд есть необходимость в...

создание DirectX окна с использованием dll
разбираюсь с сабжем за основу взял самый обычный проект Ф. Луны - создание DX окна, которое просто показывает текст. сам проект...

Создание окна в DLL, дочернего по отношению к окну другого приложения
Приветствую Вас, уважаемые! Существует некое приложение (основное), созданное в Visual C++ с использованием MFC. Предполагается создать...

7z.dll в проекте на VS C++
Всем доброго дня. Столкнулся с проблемой использования 7z.dll в проекте на с++. Подскажите как правильно подключить 7z.dll в проект.....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru