Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2012, 19:09   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Примеры программ на WinAPI (язык Си)

Здесь буду выкладывать полезные примеры на WinAPI. Каждый пример самостоятелен, то есть его можно воспроизвести с нуля. Принцип такой: есть содержание, в котором каждый пункт - это один независимый пример. Возможно, что в содержании пример будет разбит на части, если он не уместится в одном сообщении.

Просьба к форумчанам: если вы увидите, что какой-то из примеров неверен или его можно сделать лучше, то напишите здесь, пожалуйста.

GUI рассматривается по следующей ссылке (переходите сразу на последнюю страницу, в конце есть содержание): http://programmersforum.ru/showthread.php?t=211469
8Observer8 вне форума Ответить с цитированием
Старый 20.09.2012, 19:12   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Создание библиотеки dll с помощью Visual 2008.

- запускаем Visual 2008

- (на панели меню выбираем "Файл" --> Создать) (или Ctrl+Shift+N) --> выбираем тип проекта: Win32 --> выбираем шаблоны: Win32 --> вводим имя проекта --> выбираем расположение --> убираем галочку "Создать каталог для решения" --> нажимаем "Ok"

- выбираем "Параметры приложения" --> выбираем "dll" в разделе "Тип приложения" --> ставим галочку "Пустой проект" --> нажимаем "Готово"

- на панели меню выбираем "Проект" --> "Добавить новый элемент" (Ctrl+Shift+A) --> сразу пишем имя: main.c (вне зависимости от выбранного шаблона) --> нажимаем: "Добавить"

Примечание. Код примера из урока Iczelion'а: http://www.programmersforum.ru/showp...3&postcount=19
8Observer8 вне форума Ответить с цитированием
Старый 20.09.2012, 19:14   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вызов функции, которая находится в dll-файле:


Краткое описание примера:
При нажатии на кнопку вызывается функция, которая выводит сообщение "Hello, you're calling a function in this DLL" на экран. Функция находится в dll-файле.

Инструкция:
- скачать и установить инструментарий
- создать dll-файл (с именем: testfunc.dll) со следующем кодом (см. примечание 2):
Код:
#include <windows.h>
#include <tchar.h>

__declspec(dllexport) void __cdecl TestHello(void);

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        MessageBox(NULL, _T("The DLL is loaded"), _T("DLL Skeleton"), MB_OK);
        break;
    case DLL_THREAD_ATTACH:
        MessageBox(NULL, _T("The DLL is unloaded"), _T("DLL Skeleton"), MB_OK);
	    break;
    case DLL_THREAD_DETACH:
        MessageBox(NULL, _T("A thread is created in this process"), _T("DLL Skeleton"), MB_OK);
        break;
    case DLL_PROCESS_DETACH:
        MessageBox(NULL, _T("A thread is destroyed in this process"), _T("DLL Skeleton"), MB_OK);
        break;
    }

    return TRUE;
}

void TestHello(void)
{
    MessageBox(NULL, _T("Hello, you're calling a function in this DLL"), _T("DLL Skeleton"), MB_OK);

    return;
}
- создать релизный dll-файл
- создать проект Visual 2008
- создать диалоговое окно в ResEdit
- добавить на диалоговое окно следующие элементы GUI из панели Toolbox: Button - 1 шт.
- выравнять элемент GUI
- сохранить проект ResEdit (Ctrl+S)
- подключить файл ресурсов к проекту Visual 2008
- скопировать релизный dll-файл в созданный проект Visual 2008 (в туже директорию, где main.c)
- скопировать следующий код в main.c
Код:
#include <windows.h>
#include <tchar.h>

#define IDD_DIALOG1 100

INT_PTR CALLBACK DialogProc(HWND hwndDlg,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam);

LPCTSTR DlgName = MAKEINTRESOURCE(IDD_DIALOG1);

int WINAPI _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR lpCmdLine,
                     int nCmdShow)
{
    DialogBoxParam(hInstance, DlgName, NULL, DialogProc, (LPARAM) NULL);

    return TRUE;
}

#define IDC_BUTTON1 3000

HMODULE hLib;
FARPROC TestHelloAddr;
void (*TestHello)(void);

INT_PTR CALLBACK DialogProc(HWND hWnd,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam)
{
    switch(uMsg) {
    case WM_COMMAND:
        if (LOWORD(wParam) == IDC_BUTTON1) {
            hLib = LoadLibrary(_T("testfunc.dll"));
            if (hLib == NULL) {
                MessageBox(NULL, _T("Cannot load library"), _T("Load Library"), MB_OK);
                break;
            }

            TestHelloAddr = GetProcAddress(hLib, "TestHello");
            if (TestHelloAddr == NULL) {
                MessageBox(NULL, _T("TestHello function not found"), _T("Load Library"), MB_OK);
                break;
            }

            TestHello = (void(*)(void))TestHelloAddr;

            (*TestHello)();

            FreeLibrary(hLib);
        }
        break;
    case WM_CLOSE:
        EndDialog(hWnd, 0);
        break;
    default:
        return FALSE;
    }

    return TRUE;
}
Примечания:
1. В файле ресурсов "*.rc" нужно определить:
Код:
#define IDC_BUTTON1 3000
2. Об использовании динамических библиотек можно почитать на wasm'e. В данном примере, использован код из урока Iczelion'а, почти без изменений. Далее по ссылке код урока Iczelion'а на Си и ссылка на туториал на wasm'e: http://www.programmersforum.ru/showp...3&postcount=19

- откомпилировать и запустить проект Visual 2008
- по желанию: создать релизный exe-файл, который будет запускаться на других машинах, где нет требуемых библиотек

Последний раз редактировалось 8Observer8; 20.09.2012 в 19:27.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Примеры программ на языке ассемблера Intel® 64 и IA-32 8Observer8 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 19 27.11.2012 22:53
Нужны шаблоны(примеры программ) по Паскалю Сержuk Помощь студентам 1 10.03.2011 14:48
статья - Быстрое написание программ на WinAPI Pblog Обсуждение статей 0 27.02.2011 23:10
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
Метод Монте-Карло литература или примеры программ на С++ или С MIKI Помощь студентам 2 09.12.2008 13:33