PythonCOM - How to get (LPDISPATCH) of myself?
Markus Wankus
markus_wankusGETRIDOFALLCAPS at hotmail.com
Wed Mar 10 23:37:14 EST 2004
Getting clooooseeerr......
OK, apparently what I want is:
win32com.server.util.wrap(self)
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.
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.
More information about the Python-list
mailing list