Шаг 369 - Ошибки связанные с использование OCX

Самая первая ошибка связанна с тем, что элемент прописан в реестре, но фактически его нет в доступных каталогах. Узнать о том что элемента нет можно в момент создания. За основу примеров взят "Шаг 368 - Вид на основе Microsoft DataGrid OLEDB".

int CTestViewGridView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
BOOL l=cmg.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 400, 200), this, IDC_DBGRID1);
	if (l!=TRUE)
	{
		AfxMessageBox("Error");
		return 1;
	}
......
}

Здесь мы функций Create создаем элемент управления. Если элемент управления прописан в реестре но все равно нам не доступен то мы в момент вызова CREATE получим FALSE. Соответственно на данный случай нужно реагировать. Я вернул FALSE прекратив дальнейшее создание клиентской области.

Вторая ошибка может быть связанна с тем, что OCX вообще не прописан в реестре. Давайте посмотрим как можно отреагировать на это. Для регистрации и отмены регистрации я написал два BAT файла. Для отмены:

Regsvr32.exe /u C:\WINDOWS\SYSTEM\MSDATGRD.OCX

Для регистрации:

Regsvr32.exe C:\WINDOWS\SYSTEM\MSDATGRD.OCX

Подробнее читайте "Шаг 34 - Регистрация компонент RegSrv32". Так вот если отменить регистрацию то ошибка компонента будет совершенно такая же. Обрабатывается точно также. Соотвествено у нас есть возможность проиводить обработку компонентов в данном месте. Самый наверно разумный способ поместить и OCX файлы, RegSrv.bat в DLL файл читайте "N/A". А при ошибке извлекать их в текущий каталог и производить регистрацию. С этого момент Вас не будет заботить наличие этих файлов в Windows.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 19.09.2001