PROBLEMA: Sincronização do OLE chamada falha em Inter-Process/thread EnviarMensagem

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

Sintomas

Uma chamada OLE síncrona feita o destinatário de um EnviarMensagem inter-process/inter-thread falha com RPC_E_CANTCALLOUT_ININPUTSYNCCALL(0x8001010D).

Causa

A causa é explicada em detalhe na secção "Mais informação" deste artigo.

Resolução

Utilize PostMessage em vez de uma EnviarMensagem inter-process/inter-thread.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Consulte início de capítulo 13 no volume de referência de OLE 2 para programadores de 1 para as categorias de chamadas de OLE. É necessária para este artigo uma compreensão destas categorias.

A maioria das chamadas de OLE são chamadas síncronas. Uma chamada síncrona para um processo diferente produz esse processo e aguarda uma resposta desse processo. Além disso, OLE tem chamadas sincronizados de entrada estão relacionados com as interfaces de activação local. Chamadas de entrada sincronizadas são implementadas utilizando uma EnviarMensagem inter-process/inter-thread.

de 16 bits do Windows não permite a produzir uma tarefa enquanto numa EnviarMensagem in-processo/inter-thread porque poderia ocorrer um impasse do sistema. O bloqueio ocorre porque uma mensagem para o remetente pode estar presente na parte superior da fila de sistema partilhados, e isto impede que outras tarefas, incluindo o destinatário da EnviarMensagem, obtenha as respectivas mensagens da fila de sistema até que o remetente é. O remetente não consegue obter a mensagem porque está à espera de EnviarMensagem inter-process/inter-thread regressar.

No Windows de 32 bits, cada processo tem sua própria fila de sistema e esta arquitectura normalmente impede impasse problema ocorra. No entanto, quando um processo está activo local na janela de outro processo, as filas de sistema dos dois processos são sincronizadas como no windows de 16 bits, para que o bloqueio poderia ocorrer. Para evitar esta situação, OLE pára síncronas chamadas de OLE a partir de que está a ser efectuadas enquanto o autor da chamada é o destinatário de uma chamada sincronizados de entrada.

OLE determina se o emissor da chamada síncrona é um destinatário de uma chamada entrada sincronizados utilizando a API InSendMessage(). Esta verificação vasta impede que uma chamada síncrona de que está a ser efectuada se o autor da chamada é actualmente um destinatário de qualquer EnviarMensagem inter-process/inter-thread.

Propriedades

Artigo: 131056 - Última revisão: 11 de julho de 2005 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Microsoft Platform Software Development Kit-January 2000 Edition nas seguintes plataformas
    • Microsoft Windows NT Server 3.5
    • Microsoft Windows NT Server 4.0 Standard Edition
    • Microsoft Windows NT Workstation 3.5
    • Microsoft Windows NT Workstation 4.0 Developer Edition
    • Microsoft Windows 95
    • the operating system: Microsoft Windows 2000
Palavras-chave: 
kbmt kbprb KB131056 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: 131056

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