TN012: Usar MFC com recursos robustez do Windows 3.1

&Notanbsp;  Esta nota técnica foi escrita para o Windows 3.1. Windows NT implementa a maioria desses recursos. Ao executar o aplicativo sob Windows 3.1 (com as DLLs do Win32s), essas técnicas podem auxiliar na depuração. Windows 95 também implementa e estende os recursos de robustez postos em prática durante o Windows 3.1. Executando a versão de depuração do Windows 95 é a melhor maneira de garantir que seu aplicativo está sendo executado corretamente.

Windows 3.1 é uma grande melhoria sobre Windows 3.0 na área de desenvolvimento de aplicativos robusto. Windows 3.1 inclui uma série de novas funcionalidades que melhoram a confiabilidade de um aplicativo do Windows. Esta anotação técnica descreve o uso desses recursos dentro da biblioteca MFC.

Esses recursos incluem o kernel de depuração, STRICT tipo verificação, diagnóstico e gerenciamento de memória e o WINDOWSX.Aprimoramentos de h.

Kernel de depuração do Windows 3.1

&Notanbsp;  Esta seção se aplica somente ao Microsoft Visual C++ versão 1.5.

Teste seu aplicativo do MFC com os executáveis do sistema de depuração é provavelmente a melhor coisa que você pode fazer para garantir que seus aplicativos são robustos e confiáveis. As versões de depuração de executáveis do sistema executam todos os tipos de erro útil verificar para você, informando-o de quaisquer problemas que possam surgir com mensagens de saída de depuração.

A melhor maneira de usar o sistema de depuração é com duas máquinas: uma máquina para teste e depuração que possui o sistema de depuração instalados e uma máquina de desenvolvimento. Uma máquina, sua máquina de ensaio, deve ser sempre executado com o kernel de depuração. A outra máquina, sua máquina de desenvolvimento, deverá ser executada com o kernel não-Depurar. A saída do kernel de depuração pode ser enviada para a máquina principal através de uma linha de modem nulo. Se você tiver somente uma única máquina, então você deve ser certo executar o kernel de depuração (há uma degradação de desempenho pequeno). A saída de depuração kernel pode ser roteada para DBWIN, uma ferramenta incluída com o Microsoft Visual C++ versão 1.5. Além disso, a janela Visual C++ saída irá receber saída quando executando sob o depurador.

Um truque útil para depuração de single-máquina é colocar cópias dos binários do sistema e depuração e símbolos em um diretório separado e que arquivos de lote que copiar os arquivos apropriados para o seu diretório de sistema do Windows. Desta forma você pode sair do Windows e alternar rapidamente entre depuração e não-Depurar. O programa de instalação do Visual C++ versão 1.5 irá configurar isso e, em seguida, você pode alternar entre a depuração e não-Depurar versão do Windows com o D2N.BAT e N2D.Arquivos de lote BAT.

Se você não estiver executando com um depurador ou um terminal de depuração, você deve executar o aplicativo DBWIN assim você pode ver o erro e mensagens de aviso produzidas pelo sistema de depuração. Esse aplicativo está incluído com o Visual C++ versão 1.5.

Abaixo estão alguns erros comuns de programação que aparecem com freqüência em aplicativos do Windows enviados. Muitos desses problemas podem causar outros problemas sob Windows 3.0 e sistema aleatório UAEs. Os binários de sistema de depuração irão ajudá-lo a rastrear problemas, tais como:

Diagnóstico do MFC

Além disso, o Microsoft Foundation Classes são fornecidos com um conjunto de características de robustez que são compilados e ligados somente na compilação de Depurar da biblioteca (essas variantes de biblioteca terminando com uma tinha '). Uso desses recursos em aplicativos você escreve e nas classes que você design irá melhorar o tempo de execução e a interceptação de erro de tempo de compilação do seu aplicativo. Essas funções são descritas a seguir, mas todos estão documentados no manual de Referência de biblioteca de classe.

Cada classe derivada de CObject no MFC implementa uma função de membro Dump , que permite que você exibir o estado de um objeto em um formato ASCII. Esta função pode ser chamada a partir o depurador ou colocada dentro de porções de /#endif de debug # ifdef de seu código. Uma função auxiliar AfxDump está incluída na biblioteca de Depurar apenas para esta finalidade. Ele é chamado com um único parâmetro, um CObject *. Você pode chamar essa função do depurador para imprimir para fora o argumento. Você deve fornecer um membro Dump para classes que você implementar. Com AssertValid, primeiro você deve chamar explicitamente seu classe base função de membro Dump . A saída do Dump é roteada para o padrão MFC CDumpContext, afxDump, que, por padrão, vai para a janela de saída do depurador ou para a terminal de depuração. Você também pode usar o programa DBWIN para exibir a saída de afxDump. O arquivo de origem MFC\SRC\DUMPINIT.CPP inclui informações sobre como rotear afxDump para outro destino.

Rastreamento, uma macro que se comporta muito como printf, apenas rotas de saída para o local afxDump . Você deve usar instruções de Rastrear para indicar lugares complicados ou excepcionais em seu código. Como com outras características de robustez, TRACE é significativo somente na biblioteca de depuração e não tem nenhum efeito na compilação de varejo. A biblioteca MFC inclui um número de construído em instruções de rastreamento para controlar o fluxo de mensagens. Por favor, consulte técnico nota 7 para obter mais informações sobre rastreamento de depuração.

ASSERT é uma Marcar de tempo de execução para a validade da declaração. Você deve usar ASSERTs liberalmente todo o programa. Qualquer lugar que você tem um comentário para o efeito:

/ / lpStr deve ser NULL neste momento

você deve substituir o com uma declaração de tempo de execução:

Assert(LPSTR == NULL)

O compilador não consegue entender o comentário, mas ele pode avaliar a expressão na macro de declaração. Instruções ASSERT não têm efeito em compilações de vendido. Se você precisa das informações do ASSERT na compilação de varejo, em seguida, use a macro VERIFY.

MFC também inclui um alocador de memória de diagnóstico abrangente. Você usar o alocador de memória de diagnóstico para verificar que você livre de todos os recursos de memória durante certas funções do programa. O alocador de diagnóstico irá controlar o arquivo de origem e linha número da atribuição, portanto, se você usar o CMemoryState:: DumpAllObjectsSince API, você pode localizar qualquer alocações permanecem.

Por padrão, o MFC despejará todos os objetos não liberados por seu programa, (se houver) antes de sair do seu programa. Você pode exibir essa saída executando seu aplicativo sob o depurador.

Verificação de tipo ESTRITO de Windows 3.1

Verificação de tipo ESTRITO é uma opção disponível com o WINDOWS.Arquivo de cabeçalho H. MFC usa esses tipos STRICT por padrão e você deve usá-los se você estiver criando um aplicativo do MFC. MFC não oferece suporte criando um aplicativo sem defintions STRICT.

Ligação typesafe e estrita

Em C++ você tem permissão para ter muitas funções com o mesmo nome, contanto que essas funções possuem listas de parâmetros formal diferentes. Para ter símbolos de link exclusivo, o compilador C++ será "decorar" esses nomes usando um algoritmo que codifica informações sobre uma função, como o nome, número e tipo de parâmetros formais, chamando convenção, etc.

Esse nome recém-gerado é usado como o símbolo de link externo para a função. Isso é conhecido como typesafe ligação e é uma grande vantagem do C++. Esta decoração de nome não se aplica a funções dentro de um bloco de "C" extern, e é por isso que todas as APIs no WINDOWS.H estão em um bloco de.

Tipo de rigorosa verificação no WINDOWS.H aumenta a segurança de tipo para programas Windows usando tipos distintos para representar todas as alças diferentes no Windows. Assim, por exemplo, STRICT impede você de passar por engano um HPEN a uma rotina esperando um HBITMAP.

Uma vez que as APIs do Windows são todos dentro de blocos de {} extern "C", não estão decorados da maneira descrita acima. STRICT altera os tipos do diversos Windows typedefs para torná-los exclusivos (especificamente utiliza tipos de ponteiro diferentes para representar lidar coms, que não podem ser convertidos livremente sem uma conversão explícita).

Como você pode ver, se você tiver STRICT habilitado em um arquivo, mas não em outra verificação de tipos, o compilador C++ gerará símbolos de links externos diferentes para uma única função. Isto irá resultar em erros em tempo de ligação. Portanto, é recomendável que você use STRICT tipo verificação somente para módulos C (aqueles que terminam em.C). Além disso, STRICT é um compilar-tempo somente a opção, então depois que você compila seu código com êxito, os benefícios do ESTRITO são realizados completamente.

Se você está misturando ESTRITO e não-ESTRITO código, você deve estar ciente de inconsistências de ligação. Em geral, toda a programação MFC e C++ tudo deve ser feito com estrita. Se você tiver herdado código C, então não usar STRICT é aceitável.

Windows 3.1 WINDOWSX.H arquivo de cabeçalho

Novo com o Windows 3.1 e Win32 é o WINDOWSX.H cabeçalho arquivo que suporta várias extensões para o estilo c de codificação para programadores Windows usando c. Essas macro APIs, crackers de mensagem e controle APIs são definidos no arquivo WINDOWSX.H.

Essa sintaxe é projetada principalmente para programadores C. MFC oferece suporte ao uso de WINDOWSX.H, então se você tiver código existente que depende de estas tensões, use este código não modificado no MFC. Você vai encontrar, no entanto, que o MFC tem idioms comparáveis para todos os recursos de WINDOWSX.H e usa o C++ idioma para realizar essas tarefas com mais segurança semântica e arquitectónica.

Usar WINDOWSX.H, não se esqueça de # inclui-lo antes de incluir AFXWIN.H (ou STDAFX.H se você estiver usando a estrutura de AppWizard).

A única ressalva é que há dois WINDOWSX.H APIs que colidem com as APIs de C++ MFC. As duas APIs SubclassWindow e CopyRgn não estão disponíveis para uso no MFC. Você precisará de recodificar estas para usar uma API do MFC (e classes) ou para chamar a API do Windows diretamente. Você também pode codificar seu próprios macro contanto que ele tenha um nome diferente.

Técnico anotações por número |nbsp; &Notas técnicas por categoria

Index