Постараюсь кратко рассказать про подключение библиотек DLL. Но сначала ещё немного поработаем с элементами интерфейса. О том как создать простое диалоговое приложение с помощью MFC я уже писал.
Первым делом приложение должно позволять вводить какое-то число, и нам также необходимо по нажатию кнопки как-то выцепить это число из edit box'а. Делается это так.
Нажимаем на заготовке (каркасе) приложения правой кнопкой мыши на нужный элемент и добавляем новую переменную.
Первым делом приложение должно позволять вводить какое-то число, и нам также необходимо по нажатию кнопки как-то выцепить это число из edit box'а. Делается это так.
Нажимаем на заготовке (каркасе) приложения правой кнопкой мыши на нужный элемент и добавляем новую переменную.
Нам необходимо две переменные. Одна будет предоставлять методы для Edit Box - такие как получение значения из этого поля.
Вторая переменная просто будет хранить значения типа INT, полученные из Edit Box. Эту переменную можно было и вручную написать в .h файле, отвечающим за интерфейс, но мы её добавим по-ленивому.
Максимальное и минимальное значения нам, в принципе, тут не нужны, но если бы мы использовали метод UpdateData, то можно было таким образом ограничить вводимые данные.
Теперь опять выбираем вкладку с каркасом приложения, клацаем два раза на первую кнопку и среда сразу открывает нам метод по обработке нажатия клавиш. Теперь запилим туда вот такой код:
void CMFC22Dlg::OnBnClickedButton1()
{// TODO: Add your control notification handler code hereCString s;m_CEdit1.GetWindowTextA(s);m_INTedit1 = atoi(s);AfxMessageBox(s);}
Результат посмотрите сами.
Наконец о подключении библиотек!
Статическое подключение. Используется понятие "раннее связывание". Это значит, что DLL "прикрепляется" на этапе компиляции - compile-time. Это самый простой способ подключения, но для него необходимы следующие файлы: сама .DLL, хидер с описанием функций .h, и библиотечный файл .lib - все они создаются при компиляции библиотеки и закидываются в проект, требующий подключения библиотек.
Для подключения требуется вписать вот такой код:
// статическое подключение DLL
#include "myStatLib.h"#pragma comment(lib, "myStatLib.lib")
Теперь можно напрямую вызвать необходимые функции из dll.
Динамическое подключение. Использует "позднее связывание" или run-time. Подгрузка библиотеки происходит только при вызове функции. Разумеется придется самим контролировать процесс выгрузки библиотеки. Следующий код прописан в .h файле - тут определяется сначала тип указатель на функцию, а потом переменная callFDLL, являющаяся указателем на функцию. hlib - какая-то winapi структура, которая будет содержать описание подсоединенной DLL'ки. Готовую dll необходимо скопировать в проект.
protected:// типы для динамической загрузки DLL
typedef void (WINAPI *MYPROC)();MYPROC callFDLL;HMODULE hlib;
В обработчик второй кнопки должны добавить следующее:
void CMFC1Dlg::OnBnClickedButton2()
{CString s;EditControl2.GetWindowTextA(s);m_edit2Value = atoi(s);hlib = LoadLibrary("dllG.dll");callFDLL = (MYPROC) GetProcAddress(hlib,"CLDyn");FreeLibrary(hlib);}
CLDyn - имя функции, которую мы вызываем из dll.
Создать DLL. Не буду описывать опять процесс создания проекта в MSVS - там методом научного тыка всё можно создать. Но код простейшей dll стоит выложить.
Файл dllG.h
extern __declspec(dllexport) void CLDyn(const int NN);
Файл dllG.cpp
#include <windows.h>
extern __declspec(dllexport) void CLDyn(){MessageBoxA(GetActiveWindow(),(LPCSTR)("Hello from Dynamic Loaded Library!"),(LPCSTR)("Hi"),MB_OK | MB_APPLMODAL);}
Файл dllG.def - для динамического подключения этот файл необходим, т.к. позволяет определить нормальные названия функций.
LIBRARY "dllG"
EXPORTSCLDyn @1
Комментариев нет:
Отправить комментарий