Je cherche à utiliser des objets COM depuis un script Python. Ce script étant d'ailleurs interprété depuis une application C++, mais là n'est pas la question.
Dans un premier temps, pour y parvenir, j'ai essayé d'utiliser le module pyWin32 qui m'a semblé un peu lourd et pas forcément très pratique à utiliser. On m'a alors conseillé le module comtypes, qui par contre est très léger et relativement facile à utiliser.
Le soucis, c'est que je n'arrive pas à me servir de ce module pour les contrôles ActiveX que j'ai créé. Le problème étant la génération du module python à partir de l'objet COM. Dans le cas d'un objet COM tel qu'une application Excel ou Word : pas de problème, la génération se déroule parfaitement bien, en revanche, avec mes propres contrôles activeX, ce n'est pas la même.
Voici les quelques lignes de code que j'ai testé en console et les messages d'erreurs qui me sautent au visage :
>>> from comtypes.client import *
>>> ax = CreateObject("DEFAULTPROJECT.DefaultProjectCtrl.1")
# Generating comtypes.gen._36658913_FB39_4E05_8F3C_71FA859660BC_0_1_0
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
ax = CreateObject("DEFAULTPROJECT.DefaultProjectCtrl.1")
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject
return _manage(obj, clsid, interface=interface)
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 188, in _manage
obj = GetBestInterface(obj)
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 110, in GetBestInterface
mod = GetModule(tlib)
File "C:\Python27\lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule
mod = _CreateWrapper(tlib, pathname)
File "C:\Python27\lib\site-packages\comtypes\client\_generate.py", line 176, in _CreateWrapper
generate_module(tlib, ofi, pathname)
File "C:\Python27\lib\site-packages\comtypes\tools\tlbparser.py", line 708, in generate_module
items = p.parse()
File "C:\Python27\lib\site-packages\comtypes\tools\tlbparser.py", line 600, in parse
self.parse_typeinfo(tinfo)
File "C:\Python27\lib\site-packages\comtypes\tools\tlbparser.py", line 570, in parse_typeinfo
return self.ParseDispatch(tinfo, ta)
File "C:\Python27\lib\site-packages\comtypes\tools\tlbparser.py", line 305, in ParseDispatch
itf.doc = str(doc.split("\0")[0])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 12: ordinal not in range(128)
Si j'essaye de passer par un GetModule avec le .tlb de mon contrôle j'obtiens ceci :
>>> gm = GetModule("C:\Documents and Settings\bcramillet\Mes documents\Sources\Default Solution\Default Project\Debug\DefaultProject.tlb")
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
gm = GetModule("C:\Documents and Settings\bcramillet\Mes documents\Sources\Default Solution\Default Project\Debug\DefaultProject.tlb")
File "C:\Python27\lib\site-packages\comtypes\client\_generate.py", line 97, in GetModule
tlib = comtypes.typeinfo.LoadTypeLibEx(tlib)
File "C:\Python27\lib\site-packages\comtypes\typeinfo.py", line 480, in LoadTypeLibEx
_oleaut32.LoadTypeLibEx(c_wchar_p(szFile), regkind, byref(ptl))
File "_ctypes/callproc.c", line 936, in GetResult
WindowsError: [Error -2147312566] Erreur lors du chargement de la bibliothèque/DLL du type
Et si je tente aussi un GetModule avec le CLSID de mon contrôle, j'obtiens la même chose que pour le CreateObject, (logique du coup).
Je viens donc ici en quête d'une aide / explication potentielle car je nage un peu dans le brouillard
Puissiez vous m'éclairer !
A tantôt !
Module comtypes
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.