Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Quando tenta executar uma aplicação C++ gerida que tenha a inicialização COM (Component Object Model) no thread principal, poderá receber a seguinte mensagem de erro em tempo de execução:
HRESULT - 0x80010106 - não é possível alterar modo de thread depois de ser definido.
A função principal não é o ponto de entrada gerido real. O ponto de entrada gerido real é o ponto de entrada de bibliotecas de tempo de execução C (CRT). Para resolver este problema, escrever o ponto de entrada gerido e manualmente inicializar o CRT da seguinte forma:
#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 o fazer, siga estes passos:
Clique em projecto e, em seguida, clique em Propriedades .
Na caixa de diálogo Páginas de propriedades , expanda Ligador em Propriedades de configuração e, em seguida, clique para seleccionar Avançadas .
Na caixa de texto Ponto de entrada , escreva mymain e, em seguida, clique em OK .
Quando o common language runtime tem de utilizar o COM (Component Object Model) sempre antes de inicia a aplicação de utilizador, o common language runtime chama o método CoInitializeEx para inicializar o thread principal multi-threaded apartment (MTA, Message). No entanto, o common language runtime chama o método CoInitializeEx apenas conforme necessário. O common language runtime não determinista. Normalmente, aplicações que requerem um único-threaded apartment (STA) para o thread principal em vez disso, devem aplicar o atributo STAThread no ponto de entrada. Além disso, em C++ a entrada de utilizador de pontos (o método main e respectivas variantes) não é um ponto de entrada gerido true. As bibliotecas de tempo de execução C fornecer os pontos de entrada para aplicações da consola e para aplicações do windows.
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 824480
(http://support.microsoft.com/kb/824480/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.