I needed to something similar recently (using Rational Rose REI).
Win32::OLE is good for making calls to COM objects but not receiving events.
A friend suggested using ActiveState PerlCOM. The basics are you write the
interface in a language that has good COM support then invoke your perl script via COM.