Błąd w interfejsach generowanych przez win32com

Przy automatyzowaniu Corela przez COM za pomocą Pythona (z wykorzystaniem win32com) dość często pojawia się błąd podobny do tego „TypeError?: The Python instance can not be converted to a COM object” (przykład poniżej):

Traceback (most recent call last):
  File "D:\cdr2eps.py", line 35, in <module>
    doc.Export("D:\image.eps", constants.cdrEPS, Range=1, Options=0, PaletteOptions=0)
  File "<COMObject OpenDocument>", line 4, in Export
TypeError: The Python instance can not be converted to a COM object

Błąd taki pojawia się przy wywołaniach procedur z domyślnymi parametrami o typie, który jest wskaźnikiem na jakąś strukturę danych (w przykładzie powyżej są dwa takie parametry: Options i PaletteOptions?). Problem polega na tym, że (jak widać) domyślna wartość to 0 a powinno być None. Jeśli wywołamy to tak:

doc.Export("D:\image.eps", constants.cdrEPS, Range=1, Options=None, PaletteOptions=None)

to wszystko zadziała jak należy i błędu nie będzie. Obejściem problemu jest poprawianie opcji domyślnych w plikach wygenerowanych przez COM makepy utility albo podawanie wartości dla wszystkich parametrów opcjonalnych, które oczekują wskaźnika na obiekt.

© Piotr Chamera, 2001–2016