Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
A classe base para todas as exceções na Microsoft Foundation Class Library.
Sintaxe
class AFX_NOVTABLE CException : public CObject
Membros
Construtores Públicos
| Nome | Description |
|---|---|
CException::CException |
Constrói um CException objeto. |
Métodos Públicos
| Nome | Description |
|---|---|
CException::Delete |
Apaga um CException objeto. |
CException::ReportError |
Reporta uma mensagem de erro numa caixa de mensagem ao utilizador. |
Observações
Como CException é uma classe base abstrata, não podes criar CException objetos diretamente; tens de criar objetos de classes derivadas. Se precisares de criar a tua própria CExceptionclasse no estilo -, usa uma das classes derivadas listadas acima como modelo. Certifica-te de que a tua classe derivada também usa IMPLEMENT_DYNAMIC.
As classes derivadas e as suas descrições estão listadas abaixo:
| Nome | Description |
|---|---|
CSimpleException |
Uma classe base para exceções MFC críticas a recursos |
CInvalidArgException |
Condição de exceção de argumento inválida |
CMemoryException |
Exceção por falta de memória |
CNotSupportedException |
Pedido de uma operação não suportada |
CArchiveException |
Exceção específica do arquivo |
CFileException |
Exceção específica de ficheiro |
CResourceException |
Recurso do Windows não encontrado ou não criável |
COleException |
Exceção OLE |
CDBException |
Exceção de base de dados (isto é, condições de exceção que surgem para classes de base de dados MFC baseadas em Conectividade de Base de Dados Aberta) |
COleDispatchException |
Exceção de despacho OLE (automação) |
CUserException |
Exceção que indica que um recurso não foi encontrado |
CDaoException |
Exceção de objeto de acesso a dados (isto é, condições de exceção que surgem para classes DAO) |
CInternetException |
Exceção da Internet (isto é, condições de exceção que surgem para as aulas na Internet). |
Estas exceções destinam-se a ser usadas com os THROWmacros , THROW_LAST, try, catch, and_catch, e end_catch macros. Para mais informações sobre exceções, consulte Processamento de Exceções, ou consulte o artigo Tratamento de Exceções (MFC).
Para detetar uma exceção específica, use a classe derivada apropriada. Para captar todos os tipos de exceções, use CException, e depois use CObject::IsKindOf para diferenciar entre CExceptionclasses derivadas de . Note que CObject::IsKindOf só funciona para classes declaradas com a IMPLEMENT_DYNAMIC macro, para tirar partido da verificação dinâmica de tipos. Qualquer CExceptionclasse derivada em que cries também deve usar a IMPLEMENT_DYNAMIC macro.
Pode reportar detalhes sobre exceções ao utilizador chamando GetErrorMessage ou ReportError, duas funções membros que funcionam com qualquer uma das CExceptionclasses derivadas de .
Se uma exceção for apanhada por uma das macros, o CException objeto é eliminado automaticamente; não o apagues tu próprio. Se uma exceção for detetada ao usar uma catch palavra-chave, não é automaticamente eliminada. Consulte o artigo Tratamento de Exceções (MFC) para mais informações sobre quando eliminar um objeto de exceção.
Hierarquia de herança
CException
Requerimentos
Cabeçalho:afx.h
CException::CException
Esta função membro constrói um CException objeto.
explicit CException(BOOL bAutoDelete);
Parâmetros
b_AutoDelete
Especifique TRUE se a memória do CException objeto foi alocada no heap. Isto fará com que o CException objeto seja eliminado quando a Delete função membro for chamada para eliminar a exceção. Especifique FALSE se o CException objeto está na pilha ou se é um objeto global. Neste caso, o CException objeto não será eliminado quando a Delete função membro for chamada.
Observações
Normalmente nunca precisarias de chamar diretamente este construtor. Uma função que lança uma exceção deve criar uma instância de uma CExceptionclasse derivada em e chamar o seu construtor, ou deve usar uma das funções de lançamento MFC, como AfxThrowFileException, para lançar um tipo predefinido. Esta documentação é fornecida apenas para fins de completude.
CException::Delete
Esta função verifica se o CException objeto foi criado no heap e, em caso afirmativo, chama o delete operador no objeto.
void Delete();
Observações
Ao eliminar um CException objeto, use a Delete função membro para eliminar a exceção. Não use o delete operador diretamente, porque o CException objeto pode ser global ou ter sido criado na pilha.
Pode especificar se o objeto deve ser eliminado quando o objeto é construído. Para obter mais informações, consulte CException::CException.
Só precisas de ligar Delete se estiveres a usar o mecanismo C++- trycatch. Se estiveres a usar as macros TRY MFC e CATCH, então estas macros vão chamar automaticamente esta função.
Example
CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
// Note that this example performs the same actions as the
// example for CATCH, but uses C++ try/catch syntax instead
// of using the MFC TRY/CATCH macros. This sample must use
// CException::Delete() to delete the exception objects
// before closing the catch block, while the CATCH example
// implicitly performs the deletion via the macros.
try
{
pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG ullLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %u bytes long."), ullLength);
AfxMessageBox(str);
}
catch(CFileException* pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
pEx->Delete();
}
catch(CMemoryException* pEx)
{
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally, an
// an application should do everything it possibly can to
// clean up properly and _not_ call AfxAbort().
pEx->Delete();
AfxAbort();
}
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
CException::ReportError
Chame esta função membro para reportar texto de erro numa caixa de mensagem ao utilizador.
virtual int ReportError(
UINT nType = MB_OK,
UINT nMessageID = 0);
Parâmetros
nType
Especifica o estilo da caixa de mensagem. Aplique qualquer combinação dos estilos de caixa de mensagem à caixa. Se não especificar este parâmetro, o padrão é MB_OK.
nMessageID
Especifica o ID do recurso (entrada na tabela de cadeias) de uma mensagem a mostrar se o objeto exceção não tiver uma mensagem de erro. Se for 0, é exibida a mensagem "Nenhuma mensagem de erro está disponível".
Valor de retorno
Um AfxMessageBox valor; caso contrário, 0 se não houver memória suficiente para mostrar a caixa de mensagem. Veja AfxMessageBox os possíveis valores de retorno.
Example
Aqui está um exemplo do uso de CException::ReportError. Para outro exemplo, veja o exemplo para CATCH.
CFile fileInput;
CFileException ex;
// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.
// if the call to Open() fails, ex will be
// initialized with exception
// information. the call to ex.ReportError() will
// display an appropriate
// error message to the user, such as
// "\Too\Many\Bad\Dirs.DAT contains an
// invalid path." The error message text will be
// appropriate for the
// file name and error condition.
if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
ex.ReportError();
}
else
{
// the file was opened, so do whatever work
// with fileInput we were planning...
fileInput.Close();
}
Consulte também
CObject Classe
Gráfico de Hierarquia
Processamento de Exceções