1
我正在使用UPnP對象方法IUPnPDeviceFinder
:: [CreateAsyncFind][1]
而第三個參數是回調函數。將函數作爲參數傳遞給COM對象函數
我試圖創建自己的COM對象,但該方法不回叫我的功能。這裏是我的代碼:
class Callback():
_public_methods_ = ['DeviceAdded','DeviceRemoved', 'SearchComplete']
_reg_progid_ = "UPnP.PythonCallback"
_reg_clsid_ = pythoncom.CreateGuid()
def DeviceAdded (device, UDN, calltype):
print (device, ": ", calltype, " UDN: ", UDN)
return
win32com.server.register.UseCommandLine(Callback)
callserver = Dispatch("UPnP.PythonCallback")
deviceType = "urn:schemas-upnp-org:device:MediaServer:1"
devices = finder.CreateAsyncFind(deviceType,0, callserver)
finder.StartAsyncFind(devices)
其實,我只是需要這樣的:
def DeviceAdded (device, UDN, calltype):
print (device, ": ", calltype, " UDN: ", UDN)
return
deviceType = "urn:schemas-upnp-org:device:MediaServer:1"
devices = finder.CreateAsyncFind(deviceType,0, DeviceAdded)
finder.StartAsyncFind(devices)
微軟的VBScript打了一個比方。這正是我想要在Python上執行的操作(http://msdn.microsoft.com/en-us/library/windows/desktop/aa381078(v=VS.85).aspx) 如何將函數作爲COM對象的參數?
是的。這裏的主要問題是連Callback都沒有被調用。做到這一點的「正確」方式是將設備添加爲參數,而不像Microsoft示例那樣使用類。但它返回錯誤「Python實例不能轉換爲COM對象」 – bruno