Возврат кодов ошибок из методов.
Для того, чтобы сообщить контейнеру, что произошла ошибка в методе, Вы должны использовать метод 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)