Partilhar via


CException Classe

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

CObject

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