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

Traduções de Artigos Traduções de Artigos
Artigo: 287087 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Quando chamada ou aceder a uma função de shell ou interface da shell de um thread que tinha sido inicializado como multithread de apartamento, a função ou interface possa ter a funcionalidade visuais ou falham completamente.

Mais Informação

Uma chamada para CoInitializeEx(COINIT_MULTITHREADED) permite chamadas para objectos criados num thread chamado a ser executado em qualquer thread. Ao aceder a objectos que utilizam o modelo de multithread de apartamento de thread de apartamento, COM sincronizará acesso ao objecto. De forma a esta sincronização ocorrer, COM tem empacotar referências das chamadas para o objecto. Uma vez que a shell actualmente não fornece as informações necessárias, através de uma biblioteca de tipos ou proxy/stub código, para os objectos empacotar as referências, tenta aceder a objectos da shell de falhas de multithread de apartamento.

Seguem-se exemplos de como chamadas para CoInitializeEx(COINIT_MULTITHREADED) podem afectar funções que dele dependem da shell objectos:

GetOpenFileName/GetSaveFileName
Os utilizadores podem navegar para pastas de extensão de espaço de nomes como "Os meus documentos" nas caixas de diálogo Abrir e Guardar como . No entanto, estas pastas não podem ser navegadas para uma vez que o browser não consegue criar as interfaces necessárias, como, por exemplo, IShellFolder.
ShellExecute/ShellExecuteEx
Rotinas de ShellExecute podem ser escritas para expandir a funcionalidade de ShellExecute/ShellExecuteEx implementando a interface IShellExecuteHook. Quando ShellExecute/ShellExecuteEx é chamado, ganchos ShellExecute registados não podem ser carregados.
Em ambos estes exemplos, o componente que está a tentar obter um apontador de interface para um objecto da shell com CoCreateInstance, IUnknown::QueryInterface e por aí em diante normalmente irá falhar com o erro E_NOINTERFACE quando chamado a partir apartments multithread. A razão, tal como indicado acima, é que não existe nenhum código de informações ou proxy/stub de tipo para os objectos que está a ser pedida.

Referências

"Processos, threads e Apartamentos," em Fundamentals COM na documentação Platform SDK:
http://msdn.microsoft.com/en-us/library/ms693344(VS.85).aspx

Propriedades

Artigo: 287087 - Última revisão: 11 de julho de 2005 - Revisão: 1.4
A informação contida neste artigo aplica-se a:
  • Microsoft Platform Software Development Kit-January 2000 Edition
Palavras-chave: 
kbmt kbinfo kbpending kbshellgrp KB287087 KbMtpt
Tradução automática
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: 287087

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com