Um servidor de automação não pode passar um ponteiro para IPictureDisp implementação do objeto de imagem limites de processo

Traduções deste artigo Traduções deste artigo
ID do artigo: 150034 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Sintomas

Um servidor de automação que implementa um objeto de imagem quebrado pela classe CPictureHolder no MFC falha quando tenta passar um ponteiro para implementação de IPictureDisp do objeto de imagem limites de processo.

Causa

IPictureDisp obtém acesso aos métodos do objeto de imagem que não pode ser empacotado em limites de processo. Por exemplo, IPictureDisp oferece suporte a DISPID_PICT_RENDER para acessar o método de processamento dos Picture objeto. O método Render aceita um identificador para um contexto para dispositivo como o primeiro parâmetro. Identificadores de contexto de dispositivo não podem ser empacotados.

Expedição interfaces normalmente podem ser empacotadas usando IDispatch empacotamento de código, mas o objeto de imagem implementa IMarshal especificamente para fazer com que seu marshaling falhar.

Situação

Esse comportamento é por design.

Mais Informações

ClassWizard no Visual C++ permite que você selecione um tipo de retorno de LPPICTUREDISP para um método. Esse método pode retornar o IPictureDisp interface obtida chamando CPictureHolder::GetPictureDispatch. No entanto, se esse método é chamado por um controlador em execução no outro processo, o método falhará e retorna um código de erro de E_FAIL.

Porque o objeto de imagem faz com que o empacotamento de IPictureDisp falhar, problemas também podem ocorrer ao tentar obter uma interface IPictureDisp limites de thread em um objeto modelo de compartimento de vários segmentos.

Referências

Para obter mais informações sobre empacotamento, consulte "Inside OLE," segunda edição, por Kraig Brockschmidt, capítulo 6, "Local/remoto transparência", publicado pela Microsoft Press.

Propriedades

ID do artigo: 150034 - Última revisão: quinta-feira, 27 de fevereiro de 2014 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft OLE Control Developer's Kit (CDK)
Palavras-chave: 
kbnosurvey kbarchive kbmt kbtshoot kbautomation kbbitmap kbctrl kbprb KB150034 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 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: 150034

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