Top-posting just to say: thanks for working this through
so publicly; I've earmarked the posts to go back to when
I've got some time to see what's going on there. I doubt
I've got anything to contribute; I'm sure I'll have something
to learn, though!

TJG

On 06/06/2012 02:46, Paul Harrington wrote:
> 
> I got the comserver working with Python clients (both pythoncom and 
> comtypes) by inheriting from COMObject and waving typelib chickens in the 
> air and setting _com_interfaces_. This involved reading the comtypes 
> source code and looking at the debugging messages. I was unable to get it 
> to work via the documented approach of subclassing from the python class 
> code-generated from the type-library.
> 
> I got it working with Excel on one development machine but only after 
> code-signing the _ctypes.pyd dll with a certificate that is a trusted 
> publisher on that machine. See below for a theory as to why that worked.
> 
> This has been a useful 'proof by construction' for me but it is still way 
> too hacky for me to use at work. I will investigate into py2exe (it is 
> amazing that Thomas Heller is the originator of three fiendishly 
> useful packages such as py2exe, ctypes and comtypes) to package the 
> recognizer as a DLL as I don't want a code-signed _ctypes.pyd laying 
> around waiting for trouble-makers!
> 
> 
> pjjH
> 
> class Action(comtypes.COMObject):
>      _reg_threading_ = "Both"
>      _reg_clsctx_ = CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER
>      _reg_clsid_ = "{5FCDCEC7-A951-4931-84A4-7A8CA3C9416F}"
> 
> 
>      _reg_typelib_  = comtypes.gen.SmartTagLib.Library._reg_typelib_
>      # Note the underscores on the LHS but not on the RHS
>      _typelib_path_ = comtypes.gen.SmartTagLib.typelib_path
> 
>      _com_interfaces_ = [ISmartTagAction]
> 
> 
> Note that the property names have '_get_' prepended to the property name.
> 
>      def _get_VerbCount(self, SmartTagName):
>          'The total number of verbs that are supported by the 
> implementation for a given smart tag type.'
>          logging.debug('VerbCount')
>          return 1
> 
> This is the entry one has to make in HKCU to add the SmartTagAction to 
> Excel's list. However, this did not work initially as my Excel is set up 
> to trust only signed addins. I suspect that MOFL.DLL does its thing with 
> creating the recognizer and action COM instances early on shortly after 
> Excel starts up. If Excel is waiting for me to click around on the Message 
> Bar to OK loading up possibly dodgy content, I imagine that MOFL.DLL has 
> given up (silently) on initalizing that component and goes on about its 
> business. As a joke, I signed a copy of the _ctypes.pyd file with a 
> certificate that is a trusted publisher and -- rather amazingly -- the 
> caption from my Python recognizer showed up in the additional actions menu 
> and the debugging logs show the cell contents being passed correctly as a 
> parameter to InvokeVerb.
> 
> HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart 
> Tag\Actions\{5FCDCEC7-A951-4931-84A4-7A8CA3C9416F}
> 
> 
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and 
> threat landscape has changed and how IT managers can respond. Discussions 
> will include endpoint security, mobile security and the latest in malware 
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> comtypes-users mailing list
> comtypes-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/comtypes-users


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to