Александр Тарво - Использование NuMega DriverStudio для написания WDM-драйверов

Здесь есть возможность читать онлайн «Александр Тарво - Использование NuMega DriverStudio для написания WDM-драйверов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программы, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Использование NuMega DriverStudio для написания WDM-драйверов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Использование NuMega DriverStudio для написания WDM-драйверов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Использование NuMega DriverStudio для написания WDM-драйверов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Использование NuMega DriverStudio для написания WDM-драйверов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#define XDSPINTER_API __declspec(dllimport).

Мы импортируем из библиотеки четыре функции, поэтому необходимо определить их типы: параметры, передаваемые в функцию, возвращаемое значение. Это можно сделать при помощи директивы typedef:

//Объявить тип - указатель на функцию, возвращающую значение типа int и принимающую два

//параметра – массив типа char и число int. В библиотеке ей будет соответствовать функция

// EXPORT int ReadMem(char *data, int len)

typedef XDSPINTER_API int (*MemReadFun)(char *data, int len);

// EXPORT int WriteMem(char *data, int len)

typedef XDSPINTER_API int (*MemWrtFun)(char *data, int len);

// EXPORT int GetMemSize(void)

typedef XDSPINTER_API int (*MemSizeFun)();

//EXPORT bool IsDriverPresent(void)

typedef XDSPINTER_API bool (*IsDrivFun)();

Теперь пришло время создать сами указатели на функции:

MemReadFun ReadMem;

MemWrtFun WriteMem;

MemSizeFun GetMemSize;

IsDrivFun IsDriverPresent;

Теперь рассмотрим функцию, подключающую dll-библиотеку к приложению. Она будет подключать dll-библиотеку к приложению и пытаться установить связь с драйвером. Функция вернет true в случае успеха и false при неудаче. Т.к. VC++ — объектно-ориентированная среда, то эта функция будет методом одного из классов приложения (в нашем случае — класса представления).

bool CXDSPView::ConnectToDriver() {

//Переменная, в которой будет храниться возвращаемое значение.

success=true;

//HMODULE InterDll – переменная экземпляра, где хранится хэндл библиотеки.

InterDll=::LoadLibrary("XDSPInter");

if (InterDll==NULL) {

//Не удалось подключиться к библиотеке

AfxMessageBox("Couldn't load a library XDSPInter.dll",MB_ICONERROR | MB_OK);

//Вернем неудачу.

success=false;

} else {

//Библиотека подключена успешно. Импортируем функции.

ReadMem=(MemReadFun)::GetProcAddress(InterDll,"ReadMem");

if (ReadMem==NULL) {

//Не удалось импортировать функцию

AfxMessageBox("Couldn't get adress for ReadMem function from library XDSPInter.dll", MB_ICONERROR | MB_OK);

success=false;

}

WriteMem=(MemReadFun)::GetProcAddress(InterDll,"WriteMem");

if (WriteMem==NULL) {

//Не удалось импортировать функцию

AfxMessageBox("Couldn't get an adress for WriteMem function from library XDSPInter.dll", MB_ICONERROR | MB_OK);

success=false;

}

GetMemSize=(MemSizeFun)::GetProcAddress(InterDll,"GetMemSize");

if (GetMemSize==NULL) {

//Не удалось импортировать функцию AfxMessageBox("Couldn't get an adress for GetMemSize function from library XDSPInter.dll", MB_ICONERROR | MB_OK);

success=false;

}

IsDriverPresent=(IsDrivFun)::GetProcAddress(InterDll,"IsDriverPresent");

if (IsDriverPresent==NULL) {

//Не удалось импортировать функцию

AfxMessageBox("Couldn't get an adress for IsDriverPresent function from library XDSPInter.dll", MB_ICONERROR | MB_OK);

success=false;

}

}

return(success);

}

Вызов метода ConnectToDriver() целесообразно сделать в конструкторе класса. Там же надо реализовать и проверку, присутствует ли в системе драйвер. Тогда вся необходимая инициализация будет проведена еще при запуске приложения.

CXDSPView::CXDSPView() : CFormView(CXDSPView::IDD) {

//{{AFX_DATA_INIT(CXDSPView)

//}}AFX_DATA_INIT

//Здесь мы добавляем свой код. Success – переменная экземпляра. Если она

//равна true – то ошибок нет, иначе произошла какая-то ошибка.

success=true;

//Пробуем подключить dll:

if (ConnectToDriver()) {

//Удалось подключить библиотеку. Теперь пытаемся установить связь с

//драйвером – вызываем функцию в dll:

if (!IsDrvPresent()) {

//Неудача

success=false;

AfxMessageBox("Necessary driver isn't present in the system",MB_ICONERROR | MB_OK);

}

} else

//Не удалось подключиться к dll.

success=false;

}

Метод, производящий чтение памяти устройства может выглядеть следующим образом:

void CXDSPView::OnRead() {

int res; //Количество слов, прочитанных из памяти

res=(*ReadMem)(dt,256); //Пытаемся читать 256 слов.

m_buff.SetWindowText(dt); //Выводим данные на экран

//Код, характерный для VC++.

CXDSPDoc *m_doc; //Подключаем документ, связанный с представлением

m_doc=GetDocument();

//копируем туда данные.

strcpy((char*)m_doc->m_buffer,dt);

//Примечание: оба буфера должны иметь достаточный объем – минимум

//256*4+1 байт.

}

Аналогично может выглядеть метод записи в память устройство:

void CXDSPView::OnWrite() {

//Получили данные, введенный пользователем

m_buff.GetWindowText(dt,32767);

int res;

//Записываем его в память устройства. Заметим, что в качестве длины данных

//мы передаем не длину в байтах, а в 4-байтых словах.

res=(*WriteMem)(dt,strlen(dt)%4+1);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Использование NuMega DriverStudio для написания WDM-драйверов»

Представляем Вашему вниманию похожие книги на «Использование NuMega DriverStudio для написания WDM-драйверов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Использование NuMega DriverStudio для написания WDM-драйверов»

Обсуждение, отзывы о книге «Использование NuMega DriverStudio для написания WDM-драйверов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x