Erro: "HRESULT - 0x80010106" erro ocorre quando você executa um aplicativo Visual C++ gerenciado no Visual Studio .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 824480
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando você tenta executar um aplicativo de C++ gerenciado que possui a inicialização de COM (Component Object Model) no thread principal, você receberá a seguinte mensagem de erro em tempo de execução:
HRESULT - 0x80010106 - não é possível alterar o modo de thread após é definido.
Causa
Definir o estado de apartment em thread principal não é confiável.
Resolução
A função principal não é o ponto de entrada gerenciado real. O ponto de entrada gerenciado real é o ponto de entrada de bibliotecas de tempo de execução C (CRT). Para resolver esse problema, gravar o ponto de entrada gerenciado e inicializar manualmente a CRT da seguinte maneira:
#define _WIN32_WINNT 0x501#include <objbase.h>#include <stdio.h> #using <mscorlib.dll>using namespace System;extern "C" void mainCRTStartup();[System::STAThread]int mymain()  //the new entry point{	//Initialize COM	HRESULT hr = CoInitialize(0);		//Initialize the CRT	mainCRTStartup();	//uninit	CoUninitialize();	return 0;} int main(){	/*   Do the application work    that you would do in your main thread   */}
especificar explicitamente o ponto de entrada para a função mymain . Para fazer isso, execute as seguintes etapas:
  1. Clique em projeto e, em seguida, clique em Propriedades .
  2. Na caixa de diálogo Property Pages , expanda vinculador em Configuration Properties e, em seguida, clique para selecionar Avançado .
  3. Na caixa de texto do Ponto de entrada , digite mymain e, em seguida, clique em OK .
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.
Mais Informações
Quando o common language runtime deve usar o COM (Component Object Model) sempre antes de inicia o aplicativo de usuário, o common language runtime chama o método CoInitializeEx para inicializar o thread principal para o compartimento multissegmentado (MTA). No entanto, o common language runtime chama o método CoInitializeEx conforme necessário. O common language runtime não é determinístico. Normalmente, aplicativos que exigem um single-threaded apartment (STA) para o segmento principal em vez disso, devem aplicar o atributo STAThread no ponto de entrada. Além disso, no C++ a entrada de usuário aponte (método principal e suas variantes) não é um ponto de entrada gerenciado true. As bibliotecas de tempo de execução C fornecer pontos de entrada para aplicativos de console e para aplicativos do windows.

Etapas para reproduzir o problema 1

  1. Inicie o Microsoft Visual Studio .NET 2003.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Expandir Projetos do Visual c++ em Project Types , clique em MFC e, em seguida, clique em Aplicativo MFC em modelos .
  4. Digite MFCTest na caixa de texto nome , digite C:\ na caixa de texto local e, em seguida, clique em OK .
  5. No Assistente do Aplicativo MFC , clique em Suporte de documento composto .
  6. Em Suporte de documento composto , clique para selecionar servidor recipiente/completo e em seguida, clique em Concluir .
  7. No Solution Explorer, clique com o botão direito do mouse MFCTest e, em seguida, clique em Propriedades .
  8. Na caixa de diálogo Property Pages , expanda C/C ++ em Configuration Properties .
  9. Definir o Formato informações de depuração de propriedade para desativado .
  10. Expanda a Geração de código e, em seguida, defina as seguintes propriedades:
    • Defina a propriedade Verificações de tempo de execução básico como padrão .
    • Definir Ativar recriar mínima propriedade como não .
  11. Expandir linha de comando e digite / clr na caixa de texto Opções adicionais .
  12. Clique em Aplicar e, em seguida, clique em OK .
  13. Crie o aplicativo.
  14. No menu Debug , clique em Iniciar para depurar o aplicativo. Você receberá a mensagem de erro descrita na seção "Sintomas" deste artigo.

Etapas para reproduzir o problema 2

  1. Inicie o Visual Studio .NET 2003.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .
  3. Expandir Projetos do Visual c++ em Project Types , clique em .NET e, em seguida, clique em Aplicativo de console (NET) em modelos .
  4. Digite TestProject na caixa de texto nome , digite C:\ na caixa de texto local e, em seguida, clique em OK .
  5. No Solution Explorer, clique duas vezes em TestProject.cpp e, em seguida, substitua o código existente com o código a seguir:
    #include "stdafx.h"#define _WIN32_WINNT 0x501 #include <objbase.h>#include <stdio.h> #using <mscorlib.dll>using namespace System;int main(){	HRESULT hr = CoInitialize(0);	printf("hr in main thread is %d \n",hr);}
  6. Criar e executar o projeto. Você pode receber o erro de tempo de execução que é descrito na seção "Sintomas" deste artigo.
Esse problema também pode ocorrer em C++ gerenciado aplicativos sob os seguintes cenários:
  • Quando o aplicativo deve chamar o método CoInitializeEx para inicializar o thread principal para o STA.
  • Quando você compilar aplicativos MFC OLE com usando o / clr opção.
  • Quando você executa um aplicativo Windows Forms gerado pelo assistente.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 824480 - Última Revisão: 12/08/2015 03:46:43 - Revisão: 2.0

Microsoft Visual C++ .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kberrmsg kbthread kbcodegen kbcrt kbappwizard kbbug KB824480 KbMtpt
Comentários