Различия
Показаны различия между двумя версиями страницы.
— | dll [2021/07/31 21:57] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== DLL в Windows. Создание DLL в Microsoft Visual Studio ====== | ||
+ | * [[visual_studio# | ||
+ | **dumpbin.exe** (в составе Microsoft [[Visual Studio]]) - просмотр DLL, позволяет увидеть список функций, | ||
+ | c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\dumpbin.exe | ||
+ | </ | ||
+ | |||
+ | ====== my_dll.cpp DLL ====== | ||
+ | < | ||
+ | // my_dll.cpp : Defines the exported functions for the DLL application. | ||
+ | // | ||
+ | #include " | ||
+ | |||
+ | #ifdef __cplusplus | ||
+ | extern " | ||
+ | #endif | ||
+ | |||
+ | __declspec(dllexport) TCHAR * __cdecl f1(){ | ||
+ | return L" | ||
+ | } | ||
+ | |||
+ | #ifdef __cplusplus | ||
+ | } | ||
+ | #endif | ||
+ | </ | ||
+ | ====== main_prg.cpp ====== | ||
+ | Исходный код программы подгружающая функцию из DLL. | ||
+ | < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | </ | ||
+ | **typedef TCHAR * (__cdecl *func_ptr)(); | ||
+ | |||
+ | **func_ptr f1;** | ||
+ | |||
+ | < | ||
+ | HWND gr1 = NULL; | ||
+ | HWND ed2 = NULL; | ||
+ | |||
+ | LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // прототип функции WndProc | ||
+ | |||
+ | int WINAPI _tWinMain(HINSTANCE hInstance, // дескриптор текущего экземпляра окна | ||
+ | | ||
+ | | ||
+ | | ||
+ | ) | ||
+ | { | ||
+ | MSG uMsg; | ||
+ | HWND hMainWnd; | ||
+ | TCHAR szWindowClass[] = L" | ||
+ | WNDCLASSEX wcex; // объявление переменной типа структура оконного класса | ||
+ | |||
+ | wcex.cbSize = sizeof(WNDCLASSEX); | ||
+ | wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; | ||
+ | wcex.lpfnWndProc = WndProc; // | ||
+ | wcex.cbClsExtra = 0; // доп. поля, кот могут потребоваться дальше | ||
+ | wcex.cbWndExtra = 0; // доп. поля, кот могут потребоваться дальше | ||
+ | wcex.hInstance = hInstance;// | ||
+ | wcex.hIcon = LoadIcon(hInstance, | ||
+ | wcex.hCursor = LoadCursor(NULL, | ||
+ | wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); | ||
+ | wcex.lpszMenuName = NULL; // определение меню | ||
+ | wcex.lpszClassName = szWindowClass; | ||
+ | wcex.hIconSm = NULL; // | ||
+ | |||
+ | // Регистрируем класс окна | ||
+ | if (!RegisterClassEx(& | ||
+ | MessageBox(NULL, | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | hMainWnd = CreateWindow(szWindowClass/ | ||
+ | // Создаем основное окно приложения | ||
+ | L"A Hellol Application"/ | ||
+ | WS_OVERLAPPEDWINDOW/ | ||
+ | CW_USEDEFAULT/ | ||
+ | 0/ | ||
+ | CW_USEDEFAULT/ | ||
+ | 0/ | ||
+ | (HWND)NULL/ | ||
+ | (HMENU)NULL/ | ||
+ | (HINSTANCE)hInstance/ | ||
+ | NULL/ | ||
+ | );// | ||
+ | |||
+ | // Показываем наше окно | ||
+ | ShowWindow(hMainWnd/ | ||
+ | UpdateWindow(hMainWnd); | ||
+ | |||
+ | // Выполняем цикл обработки сообщений до закрытия приложения | ||
+ | while (GetMessage(& | ||
+ | NULL/ | ||
+ | 0/ | ||
+ | 0/ | ||
+ | )/ | ||
+ | { | ||
+ | TranslateMessage(& | ||
+ | DispatchMessage(& | ||
+ | } | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) | ||
+ | { | ||
+ | int wmId, wmEvent; | ||
+ | PAINTSTRUCT ps; | ||
+ | HDC hdc; | ||
+ | |||
+ | switch (uMsg) | ||
+ | { | ||
+ | case WM_CREATE: | ||
+ | { | ||
+ | CreateWindow(L" | ||
+ | ed2=CreateWindow(L" | ||
+ | }break; | ||
+ | case WM_COMMAND: | ||
+ | { | ||
+ | wmId | ||
+ | wmEvent = HIWORD(wParam); | ||
+ | if(wmId == 20) | ||
+ | { | ||
+ | // Загрузить DLL | ||
+ | |||
+ | HINSTANCE hinstLib; | ||
+ | |||
+ | // Get a handle to the DLL module. | ||
+ | |||
+ | hinstLib = LoadLibrary(TEXT(" | ||
+ | |||
+ | if (hinstLib == NULL){ | ||
+ | |||
+ | MessageBox(NULL, | ||
+ | |||
+ | if (hinstLib){ | ||
+ | |||
+ | f1=(func_ptr)GetProcAddress(hinstLib," | ||
+ | } | ||
+ | TCHAR buff[200] = {0};// | ||
+ | wcscat_s(buff, | ||
+ | SetWindowText(ed2, | ||
+ | } | ||
+ | }break; | ||
+ | default: | ||
+ | return DefWindowProc(hWnd, | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга