|
PHP peut être utilisé pour accéder à des objets COM et DCOM sur les plates-formes Win32.
1. J'ai compilé une DLL pour calculer quelquechose. Y a-t-il un moyen d'utiliser cette DLL sous PHP?
Si c'est une DLL simple, il n'y a aucun moyen pour le moment de l'utiliser avec PHP. Si la DLL contient un serveur COM, vous pourrez l'utiliser si elle implémente l'interface IDispatch.
Il y a des dixaines de types de VARIANT et de combinaisons entre elles. La plupart d'entre elles sont déjà supportées, mais quelques une ne sont toujours pas implémentées. Les tableaux ne sont pas complètement supportés. Seuls le tableaux unidimensionnels indexés peuvent être transmis entre PHP et COM. Si vous trouvez d'autres types qui ne sont pas supportés, reportez les nous comme un bogue (si ce n'est pas déjà fait) et fournissez le plus d'informations possibles.
Généralement, c'est possible, mais comme PHP est utilisé le plus souvent en tant que langage de script web et dans un environnement de serveur web, les objets visuels n'apparaitront jamais sur le bureau du serveur. Si vous voulez utiliser PHP pour scripter des applications, par exemple avec PHP-GTK, il n'y a aucune limitation à accéder et manipuler des objets visuels via COM.
Non, vous ne pouvez pas. Les instances COM sont traitées comme des ressources, ce qui signifie qu'elles ne sont disponibles que dans un seul contexte de script.
En PHP 5, l'extension COM envoie des exceptions com_exception, que vous pouvez intercepter en inspectant le membre code pour déterminer que faire.
En PHP 4, il n'est pas possible d'intercepter des erreurs COM en dehors de la façon dont elles sont fournies par PHP lui-même (@, track_errors, ..).
Non, il n'y a malheureusement pas d'outil disponible pour le faire en PHP.
7. Que signifie 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
Cette erreur peut avoir plusieurs causes :
le CLSID est incorrect
la DLL demandée est introuvable
le composant demandé n'implémente pas l'interface IDispatch
Exactement de la même manière qu'avec des objets locaux. Vous devez juste passer l'adresse IP de la machine distante en deuxième paramètre du constructeur COM.
Assurez-vous que com.allow_dcom =TRUE dans votre php.ini.
Editez votre php.ini et mettez com.allow_dcom =TRUE.
Cela n'a rien à voir avec PHP. Les objets ActiveX sont chargés côté client s'il sont demandés par le document HTML. Il n'y a aucune relation avec le script PHP et il n'y a pas pas d'interaction directe possible avec le serveur.
C'est possible avec l'aide de monikers. Si vous voulez des références multiples aux même mot d'instance, vous pouvez créer une instance de la façon suivante :
<?php |
Cela créera une nouvelle instance s'il n'y en a aucune disponible ou retournera un descripteur vers l'instance courante, si elle est disponible.
Vous pouvez définir un moniteur d'événement (sink) et le lier en utilisant com_event_sink(). Vous pouvez utiliser com_print_typeinfo() pour que PHP génère un squelette pour la classe du moniteur d'événement.
13. J'ai des problèmes quand j'invoque une méthode d'un objet COM qui expose plus d'une interface. Que puis-je faire?
La réponse est aussi simple que non satisfaisante. Je ne sais pas exactement, mais je pense que vous ne pouvez rien faire. Si quelqu'un a des informations spécifiques sur ce sujet, faites le moi savoir :)
COM+ étend COM avec un canevas pour gérer des composants via MTS et MSMQ mais il n'y a rien de particulier que PHP doit supporter pour utiliser de tels composants.
15. Si PHP peut manipuler des objets COM, peut-on imaginer d'utiliser des resources de composants, en conjontion avec PHP?
PHP ne supporte pas encore les transactions. Ainsi, si une erreur se produit, aucun rollback n'est initié. Si vous utilisez des composants qui supportent les transactions, vous devrez implémenter le gestionnaire de transactions par vous-même.
Précédent | Sommaire | Suivant |
PHP et HTML | Niveau supérieur | PHP et les autres langages |
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:02:01