Roman Yakovenko schrieb:
> Good morning.
> 
> I got error while calling comtypes.client.GetModule function.
> Here is the call stack:
> 
>>e:\Python25\pythonw.exe -u "pdb_reader.py"
> Traceback (most recent call last):
>   File "pdb_reader.py", line 8, in <module>
>     print comtypes.client.GetModule( r'D:\Program Files\Microsoft
> Visual Studio .NET 2003\Visual Studio SDKs\DIA SDK\bin\msdia71.dll' )
>   File "e:\python25\Lib\site-packages\comtypes\client\_generate.py",
> line 100, in GetModule
>     is_current, mod = _CreateWrapper(tlib, pathname)
>   File "e:\python25\Lib\site-packages\comtypes\client\_generate.py",
> line 191, in _CreateWrapper
>     return True, imp.load_module(modname, file_, module_path, desc)
>   File 
> "e:\Python25\lib\site-packages\comtypes\gen\_106173A0_0173_4E5C_84E7_E915422BE997_0_2_0.py",
> line 761, in <module>
>     ( ['out'], POINTER(POINTER(IDiaSymbol)), 'ppSymbol' )),
>   File "e:\python25\Lib\site-packages\comtypes\__init__.py", line 239,
> in __setattr__
>     self._make_methods(value)
>   File "e:\python25\Lib\site-packages\comtypes\__init__.py", line 492,
> in _make_methods
>     prototype = WINFUNCTYPE(restype, *argtypes)
>   File "e:\Python25\lib\ctypes\__init__.py", line 121, in WINFUNCTYPE
>     class WinFunctionType(_CFuncPtr):
> TypeError: Error when calling the metaclass bases
>     item 5 in _argtypes_ has no from_param method
> 
> I am using standard Python 2.5 installation with ctypes module, which
> comes with it. I am using SVN version of comtypes.

The msdia71.dll typelibrary is buggy.  The microsoft oleview utility, for 
example,
decompiles an idl file which contains these snippets:

[
  odl,
  uuid(72827A48-D320-4EAF-8436-548ADE47D5E5),
  helpstring("IDiaSymbol Interface")
]
interface IDiaSymbol : IUnknown {
    ...
    HRESULT _stdcall get_dataBytes(
                    [in] unsigned long cbData, 
                    [out] unsigned long* pcbData, 
                    [out] IDiaSymbol data);
                    ^^^^^^^^^^^^^^^^^^^^^^
    ...
    HRESULT _stdcall get_types(
                    [in] unsigned long cTypes, 
                    [out] unsigned long* pcTypes, 
                    [out] IDiaSymbol types);
                    ^^^^^^^^^^^^^^^^^^^^^^
    ...
    HRESULT _stdcall get_typeIds(
                    [in] unsigned long cTypeIds, 
                    [out] unsigned long* pcTypeIds, 
                    [out] IDiaSymbol typeIds);
                    ^^^^^^^^^^^^^^^^^^^^^^
    ...
};

There are also other interfaces in the typelib that have methods with invalid 
parameters.

Note that IDiaSymbol is a COM interface; this cannot appear as parameter in a 
COM
method (only pointers to interfaces are allowed).  Of course, the MS idl 
compiler
also refuses to compile such code.

What can you do?  There are several options:
- fix the generated Python code manually:  replace the parameter declarations 
by valid ones
- try to compile a tlb yourself from the dia2.idl file that is also provided (I 
tried this
  but the compiler did not find a cvconst.h file that is imported by this idl).

Thomas


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to