Для того, чтобы сообщить контейнеру, что произошла ошибка в методе, Вы должны использовать метод COleControl::ThrowError. Этот метод имеет параметр SCODE ( status code ). Вы можете использовать свой код для SCODE или применять один из определенных. Этот метод можно применять только для методов или для функций Get/Set. В остальных случаях Вы должны вызвать метод COleControl::FireError. Этот метод также использует в качестве параметра код типа SCODE.
Таблица 3. Коды ошибок для ActiveX
Ошибка |
Описание |
CTL_E_ILLEGALFUNCTIONCALL |
Неправильный вызов функции |
CTL_E_OVERFLOW |
Переполнение |
CTL_E_OUTOFMEMORY |
Вне памяти |
CTL_E_DIVISIONBYZERO |
Деление на ноль |
CTL_E_OUTOFSTRINGSPACE |
Вне диапазона строки |
CTL_E_OUTOFSTACKSPACE |
Вне диапазона стека |
CTL_E_BADFILENAMEORNUMBER |
Плохое имя файла или число |
CTL_E_FILENOTFOUND |
Файл не найден |
CTL_E_BADFILEMODE |
Неверный режим файла |
CTL_E_FILEALREADYOPEN |
Файл уже открыт |
CTL_E_DEVICEIOERROR |
Ошибка устройства ввода/вывода |
CTL_E_FILEALREADYEXISTS |
Файл уже существует |
CTL_E_BADRECORDLENGTH |
Плохая длина записи |
CTL_E_DISKFULL |
Диск переполнен |
CTL_E_BADRECORDNUMBER |
Плохой номер записи |
CTL_E_BADFILENAME |
Плохое имя файла |
CTL_E_TOOMANYFILES |
Слишком много файлов |
CTL_E_DEVICEUNAVAILABLE |
Устройство недоступно |
CTL_E_PERMISSIONDENIED |
Доступ запрещен |
CTL_E_DISKNOTREADY |
Диск не готов |
CTL_E_PATHFILEACCESSERROR |
Ошибка доступа к файлу |
CTL_E_PATHNOTFOUND |
Путь не найден |
CTL_E_INVALIDPATTERNSTRING |
Неверный образец |
CTL_E_INVALIDUSEOFNULL |
Неверное использование NULL |
CTL_E_INVALIDFILEFORMAT |
Неверный формат файла |
CTL_E_INVALIDPROPERTYVALUE |
Неверное значение свойства |
CTL_E_INVALIDPROPERTYARRAYINDEX |
Неверный индекс в массиве свойств |
CTL_E_SETNOTSUPPORTEDATRUNTIME |
Установка свойства не поддерживается во время выполнения программы |
CTL_E_SETNOTSUPPORTED |
Установка свойства не поддерживается (свойство только читается) |
CTL_E_NEEDPROPERTYARRAYINDEX |
Необходим индекс в массиве свойств |
CTL_E_SETNOTPERMITTED |
Установка свойства не разрешено |
CTL_E_GETNOTSUPPORTEDATRUNTIME |
Получение свойства не поддерживается во время выполнения программы |
CTL_E_GETNOTSUPPORTED |
Получение свойства не поддерживается (свойство только устанавливается) |
CTL_E_PROPERTYNOTFOUND |
Свойство не найдено |
CTL_E_INVALIDCLIPBOARDFORMAT |
Неверный формат для буфера обмена |
CTL_E_INVALIDPICTURE |
Неверный формат рисунка |
CTL_E_PRINTERERROR |
Ошибка принтера |
CTL_E_CANTSAVEFILETOTEMP |
Не могу сохранить файл в TEMP |
CTL_E_SEARCHTEXTNOTFOUND |
Не найден указанный текст |
CTL_E_REPLACEMENTSTOOLONG |
Текст для замены слишком длинный |
Для определения своего кода Вы можете использовать макрос CUSTOM_CTL_SCODE . Параметр для этого макроса должен лежать в диапазоне от 1000 до 32767 включительно. Например:
#define MYCTL_E_SPECIALERROR CUSTOM_CTL_SCODE(1000)