Python实例到COM对象

Python实例到COM对象,python,com,ole,Python,Com,Ole,我在Python中使用COM对象时遇到了一个小问题 我使用的COM对象有一个名为SetCallback的方法,它接受一个对象,方法如下所示: [id(0x60010010)] void SetCallback([in] IDispatch* callbackobject); 取自MS OLE/COM对象查看器 现在,如果我用python创建COM应用程序的实例,在我尝试将对象的实例传递给该方法之前,一切都很好 callback = Callback() mycomobject.

我在Python中使用COM对象时遇到了一个小问题

我使用的COM对象有一个名为
SetCallback
的方法,它接受一个
对象
,方法如下所示:

    [id(0x60010010)]
    void SetCallback([in] IDispatch* callbackobject);
取自MS OLE/COM对象查看器

现在,如果我用python创建COM应用程序的实例,在我尝试将对象的实例传递给该方法之前,一切都很好

callback = Callback()
mycomobject.SetCallback(callback)

class Callback():
    def SetStatusText(self,status):
        print status
我在python窗口中得到的错误是:
TypeError:python实例无法转换为COM对象

在C#中执行相同的操作时,我通常会将我的class def设置为:

[ComVisible(True)]
public class Callback 
{
   //some methods here
}
方法调用与Python版本相同


为了使用对象实例作为COM对象的回调,我必须在Python中执行类似的操作。

AFAIK该对象需要与COM兼容。 老实说,我不知道什么是开箱即用的,但我们有一个类似的情况(在一个供应商的软件中),这是通过使用ActiveState的ActivePython解决的

这两种方式都可以正常工作,一个调度器可以自动包装COM兼容对象以进行python访问,另一种方式则可以。 如果您没有许可证和/或财务限制,那么可能值得一看


如果有人能在没有任何附加库的情况下打开它,请期待回复。

解决了它!只需制作自己的COM服务器并注册,然后通过Dispatch创建对象:

class Callback():
    _public_methods_ = ['SetStatusText']
    _reg_progid_ = "mycomobject.PythonCallback"
    _reg_clsid_ = "{14EF8D30-8B00-4B14-8891-36B8EF6D51FD}"
    def SetStatusText(self,status):
        print status

if __name__ == "__main__":
    print "Registering COM server..."
    import win32com.server.register
    win32com.server.register.UseCommandLine(Callback)
    main()
大体上


有趣的问题。com系统与标准python数据类型(int、strings、unicode等)配合使用非常好。是否可以创建一个变通方法,比如创建一个可以模仿SetCallback函数的监控类?
callback = Dispatch("mycomobject.PythonCallback")
#callback.SetStatusText("Hello World")
mycomobject.SetCallback(callback)