array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'faq.com.php', 1 => 'PHP e COM', ), 'up' => array ( 0 => 'faq.php', 1 => 'FAQ', ), 'prev' => array ( 0 => 'faq.html.php', 1 => 'PHP e HTML', ), 'next' => array ( 0 => 'faq.misc.php', 1 => 'Questões Diversas', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'faq/com.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
PHP pode ser usado para acessar objetos COM e DCOM em plataformas Win32.
Se for uma DLL simples, ainda não tem como executá-la no PHP. Se a DLL contem um serviço COM você pode acessá-lo se ele implementar a interface IDispatch.
Existem dezenas de tipos VARIANT e combinações dos mesmos. A maioria deles já são suportados mas alguns ainda tem que ser implementados. Arrays não são completamente suportados. Apenas arrays indexados com uma única dimensão podem ser passados entre o PHP e COM. Se você achar outros tipos que não são suportados, por favor relate-os como um bug (se não tiverem sido relatados ainda) e passe o máximo de informação disponível.
Geralmente é, mas como o PHP é principalmente usado como linguagem de script pra web, ele é executado no contexto dos servidores web, então objetos visuais nunca aparecerão no desktop do servidor. Se você usa o PHP para script de aplicações, ex.: em conjunto com PHP-GTK não há limitação no acesso e manipulação de objetos visuais através de COM.
Não, não pode. Instâncias COM são tratadas como recursos (resources) e, portanto, só estão disponíveis no contexto de um script único.
A extensão COM dispara exceções do tipo
com_exception
, que você pode pegar e então inspecionar o
membro code
para determinar o que fazer depois.
Não, infelizmente não existe tal ferramenta disponível para o PHP.
Esse erro pode ter várias razões:
Exatamente como você executa objetos locais. Você só tem que passar o IP da máquina remota como segundo parâmetro para o construtor COM.
Tenha certeza de marcar
com.allow_dcom=
true
no seu php.ini.
Edite seu arquivo php.ini e marque
com.allow_dcom=
true
.
Isso não tem nada a ver com o PHP. Objetos ActiveX são carregados no lado do cliente se eles forem requisitados pelo documento HTML. Não há relação com o script PHP e, portanto, nenhuma interação direta possível com o lado do servidor.
É possível com a ajuda de monikers. Se você quiser referências múltiplas para a mesma instância você pode criar uma instância como mostrado abaixo:
<?php
$word = new COM("C:\docs\word.doc");
?>
Isso criará uma nova instância se nenhuma instância sendo executada estiver disponível e retornará um handle para ela, se disponível.
Você pode definir um interceptador de eventos usando com_event_sink(). Você pode usar com_print_typeinfo() para que o PHP gere um esqueleto para a classe interceptadora de eventos.
A resposta é tão simples quanto insatisfatória. Eu não sei exatamente, mas acho que não há nada a fazer. Se alguém tem informação específica sobre isso, por favor » me avise (mande e-mails em inglês) :)
COM+ extende COM por meio de um framework para manusear componentes através de MTS e MSMQ, mas não há nada de especial que o PHP precise suportar para usar tais componentes.
O PHP em si não lida com transações ainda. Por isso, se um erro ocorre, nenhum rollback é iniciado. Se você usar componentes que suportem transações você pode implementar a administração de transações por conta própria.