PythonCOM - How to get (LPDISPATCH) of myself?

Markus Wankus markus_wankusGETRIDOFALLCAPS at hotmail.com
Mon Mar 8 22:32:00 EST 2004


In the spirit of trial and error.. ;o) ..I tried the following to get a 
Dispatch object to myself from within my Python COM server:

pythoncom.UnwrapObject(pythoncom.GetActiveObject(self._reg_progid_))

But got the following exception:

Traceback (most recent call last):
   File "C:\PYTHON23\lib\site-packages\win32com\universal.py", line 173, 
in dispatch
     retVal = ob._InvokeEx_(meth.dispid, 0, meth.invkind, args, None, None)
   File "C:\PYTHON23\lib\site-packages\win32com\server\policy.py", line 
322, in _InvokeEx_
     return self._invokeex_(dispid, lcid, wFlags, args, kwargs, 
serviceProvider)
   File "C:\PYTHON23\lib\site-packages\win32com\server\policy.py", line 
541, in _invokeex_
     return func(*args)
   File "E:\_DEV\python\solidworks\PropertyPageUtils.py", line 53, in 
ConnectToSW
     obj = 
pythoncom.UnwrapObject(pythoncom.GetActiveObject(self._reg_progid_))
pywintypes.com_error: (-2147221021, 'Operation unavailable', None, None)

Can anyone tell me what 'Operation unavailable' might be hinting at?

Markus.

Markus Wankus wrote:
> I have a Python COM server which supports callbacks for a large CAD 
> program.  It adds menu items and then listens to events - however, I 
> have a problem (obviously)...  I'm a COM idiot - so please expect dumb 
> questions.
> 
> There are a bunch of functions that require a pointer to the event 
> handler, or a pointer to my COM server.  Prolem is - it is looking for a 
> pointer to a Dispatch object - but I have already been dispatched. Maybe 
> an example will clear things up.  One of the functions is as follows:
> 
> Status = SldWorks.SetAddinCallbackInfo ( ModuleHandle, AddinCallbacks, 
> Cookie )
> 
> Input:
>  (long) ModuleHandle
>  Instance handle of the add-in
> 
> Input:
>  (LPDISPATCH) AddinCallbacks
>  Pointer to the object that includes the add-in callback methods
> 
> Input:
>  (long) Cookie
>  Add-in ID; this is the same Cookie you specified in SwAddin::ConnectToSW
> 
> Output:
>  (VARIANT_BOOL) Status
>  TRUE if successful, FALSE if unsuccessful
> 
> What I *want* to do is essentially:
> 
> SetAddinCallbackInfo(id(self), self, self.ICookie)
> 
> ...however - this fails because "self" (my COM server) is not a Pointer 
> to a Dispatch object.
> 
> I can get it to work if I do the following:
> 
> SetAddinCallbackInfo(id(self), Dispatch(self._reg_progid_), self.ICookie)
> 
> ...however this dipatches a new instance of my COM server, losing any 
> attributes that may have been set since instantiation - thus is useless.
> 
> Is there a way to get a pointer to a Dispatch object of yourself?
> 
> Thanks,
> Mark.



More information about the Python-list mailing list