| Store | Cart

PythonCOM - How to get (LPDISPATCH) of myself?

From: Markus Wankus <mark...@hotmail.com>
Wed, 10 Mar 2004 23:37:14 -0500
Getting clooooseeerr......

OK, apparently what I want is:


This seems to work fine.  All I have left to do is to get my callbacks 
to work.  They are intermittent, but I think it is not Python's fault...


Markus Wankus wrote:
> 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.

Recent Messages in this Thread
Markus Wankus Mar 08, 2004 04:37 am
Markus Wankus Mar 09, 2004 03:32 am
Markus Wankus Mar 11, 2004 04:37 am
Markus Wankus Mar 14, 2004 03:33 am
Messages in this thread