Você está offline; aguardando reconexão
Entrar

INFO: Chamar funções de shell e interfaces de um multithreaded apartment

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.

287087
Sumário
Quando você chama ou acessar uma função de shell ou interface shell de um thread que foi inicializado como um apartamento multithreaded, a função ou interface pode ter sua funcionalidade prejudicada ou falhar completamente.
Mais Informações
Uma chamada para CoInitializeEx(COINIT_MULTITHREADED) permite chamadas para objetos criados no thread de chamada para ser executado em qualquer segmento. Ao acessar objetos que usam o apartment threading modelo a partir do multithreaded apartment, COM sincronizará acesso ao objeto. Para a sincronização ocorra, COM deve realizar marshaling chamadas para o objeto. Como o shell não fornece as informações necessárias no momento, através de uma biblioteca de tipos ou proxy/stub código, para seus objetos sejam empacotadas, tenta acessar objetos de shell a partir de uma falha de multithreaded apartment.

A seguir é exemplos de como chamadas para CoInitializeEx(COINIT_MULTITHREADED) podem afetar funções que dependem de objetos do shell:

GetOpenFileName/GetSaveFileName
Os usuários podem navegar para pastas de extensão de espaço para nome como "Meus documentos" pelas caixas de diálogo Abrir e Salvar como . No entanto, essas pastas não podem ser visitadas a porque o navegador não é possível criar as interfaces necessárias, como IShellFolder.
ShellExecute/ShellExecuteEx
Ganchos de ShellExecute podem ser escritos para estender a funcionalidade do ShellExecute/ShellExecuteEx Implementando a interface IShellExecuteHook. Quando ShellExecute/ShellExecuteEx é chamado, ganchos ShellExecute registrados não podem ser carregados.
Em ambos esses exemplos, o componente que está tentando obter um ponteiro de interface para um objeto shell com CoCreateInstance, IUnknown::QueryInterface e assim por diante normalmente falhará com erro E_NOINTERFACE quando chamado de compartimentos multithread. O motivo, como observado acima, é que não há nenhum código de proxy/stub ou informações de tipo para os objetos que está sendo solicitado.
Referências
"De processos, threads e apartments," em conceitos básicos de COM na documentação do Platform SDK:

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 287087 - Última Revisão: 07/11/2005 19:05:49 - Revisão: 1.4

  • Microsoft Platform Software Development Kit-January 2000 Edition
  • kbmt kbinfo kbpending kbshellgrp KB287087 KbMtpt
Comentários