Шрифт:
//Вернем неудачу.
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);