Вход/Регистрация
Использование NuMega DriverStudio для написания WDM-драйверов
вернуться

Тарво Александр

Шрифт:

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

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);

  • Читать дальше
  • 1
  • ...
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: