On Fri, Aug 22, 2008 at 3:01 AM, Thomas Heller <[EMAIL PROTECTED]> wrote:
> Anthony Tuininga schrieb:
>>
>> The traceback doesn't produce anything useful, unfortunately.
>>
>> Traceback (most recent call last):
>>   File "CreateSchedule.py", line 17, in <module>
>>     modelSpace = app.ActiveDocument.ModelSpace
>> _ctypes.COMError: (-2147467262, 'No such interface supported', (None,
>> None, None, 0, None))
>>
>> I've tried and app.ActiveDocument returns something but any attempt to
>> reference ModelSpace or anything else that looks like an object
>> doesn't appear to work.
>>
>> As for debugging, what sort of debugger were you referring to? I'm not
>> familiar with the comtypes architecture yet so some pointers as to
>> where to look would be helpful. I already saw the "QueryInterface"
>> call but didn't notice anything calling that before the exception took
>> place. Any suggestions on where to look next would be helpful. Thanks!
>
> I debug with pdb from the command line; other debuggers may work as well.
> Here is an commented example stepping through app.Documents where app is
> a com pointer to MS word:
>
> C:\sf\comtypes>py25
> Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] 
> on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> from comtypes.client import CreateObject
>>>> word = CreateObject("Word.Application")
>>>> word.Documents
> <POINTER(Documents) ptr=0x254c4c at b8ca30>
>>>> type(word).Documents
> <property object at 0x030928A0>
>>>> type(word).Documents.fget
> <COM method offset 11: WinFunctionType at 0x0304C5D0>
>>>> type(word).Documents.fget.restype
> <class 'ctypes.HRESULT'>
>>>> type(word).Documents.fget.argtypes
> (<class 'ctypes.LP_POINTER(Documents)'>,)
>>>>
>
> So, 'word.Documents' is a property, and its fget function is a WinFunctionType
> (a ctypes implemented 'callback' function) that wraps the native COM call.
> We can call the fget function with the word object to retrieve the 'Documents'
> attribute; this is what happens internally in Python when 'word.Documents' is
> evaluated:
>
>>>> type(word).Documents.fget(word)
> <POINTER(Documents) ptr=0x271994 at b8ca30>
>>>>
>
> Now stepping through this with pdb.  We cannot step through the actual 
> WinFunctionType
> call with the Python debugger since this is implemented in C, but we see the 
> processing
> in Python to retrieve the return value.
>
>>>> pdb.run("word.Documents")
>> <string>(1)<module>()
> (Pdb) s
> --Call--
>> c:\sf\comtypes\comtypes\client\__init__.py(38)wrap_outparam()
> -> def wrap_outparam(punk):
> (Pdb) l
>  33     import comtypes.gen
>  34
>  35     ### for testing
>  36     ##gen_dir = None
>  37
>  38  -> def wrap_outparam(punk):
>  39         logger.debug("wrap_outparam(%s)", punk)
>  40         if not punk:
>  41             return None
>  42         if punk.__com_interface__ == comtypes.automation.IDispatch:
>  43             return GetBestInterface(punk)
> (Pdb)
>  44         return punk
>  45
>  46     def GetBestInterface(punk):
>  47         """Try to QueryInterface a COM pointer to the 'most useful'
>  48         interface.
>  49
>  50         Get type information for the provided object, either via
>  51         IDispatch.GetTypeInfo(), or via IProvideClassInfo.GetClassInfo().
>  52         Generate a wrapper module for the typelib, and QI for the
>  53         interface found.
>  54         """
> (Pdb)
>
> Now we can single-step through the code in the wrap_outparam() function.
> Hope that helps,

It helps demonstrate that the problem is much deeper. :-) I tried
using pdb as specified and app.ActiveDocument works as you suggested
with wrap_outparam() being shown in the trace. When I use
app.ActiveDocument.ModelSpace then it jumps immediately to the __del__
method since the pointer in question is being destroyed.

FYI, I uninstalled AutoCAD and AutoPLANT entirely and then reinstalled
both and all worked -- until I installed AutoPLANT Structural (an
addon to AutoPLANT which I require) and things broke again. So its
something deep inside COM that is not working as expected. I'll keep
poking about to see if I can figure out more.

Anthony

> --
> Thanks,
> Thomas
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> comtypes-users mailing list
> comtypes-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/comtypes-users
>

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to