123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import pythoncom
- from win32com.server import util
- from win32com.server import exception
- VT_EMPTY = pythoncom.VT_EMPTY
- class Bag:
- _public_methods_ = [ 'Read', 'Write' ]
- _com_interfaces_ = [ pythoncom.IID_IPropertyBag ]
- def __init__(self):
- self.data = { }
- def Read(self, propName, varType, errorLog):
- print("read: name=", propName, "type=", varType)
- if propName not in self.data:
- if errorLog:
- hr = 0x80070057
- exc = pythoncom.com_error(0, "Bag.Read", "no such item", None, 0, hr)
- errorLog.AddError(propName, exc)
- raise exception.Exception(scode=hr)
- return self.data[propName]
- def Write(self, propName, value):
- print("write: name=", propName, "value=", value)
- self.data[propName] = value
- class Target:
- _public_methods_ = [ 'GetClassID', 'InitNew', 'Load', 'Save' ]
- _com_interfaces_ = [ pythoncom.IID_IPersist,
- pythoncom.IID_IPersistPropertyBag ]
- def GetClassID(self):
- raise exception.Exception(scode=0x80004005) # E_FAIL
- def InitNew(self):
- pass
- def Load(self, bag, log):
- print(bag.Read('prop1', VT_EMPTY, log))
- print(bag.Read('prop2', VT_EMPTY, log))
- try:
- print(bag.Read('prop3', VT_EMPTY, log))
- except exception.Exception:
- pass
- def Save(self, bag, clearDirty, saveAllProps):
- bag.Write('prop1', 'prop1.hello')
- bag.Write('prop2', 'prop2.there')
- class Log:
- _public_methods_ = [ 'AddError' ]
- _com_interfaces_ = [ pythoncom.IID_IErrorLog ]
- def AddError(self, propName, excepInfo):
- print("error: propName=", propName, "error=", excepInfo)
- def test():
- bag = Bag()
- target = Target()
- log = Log()
- target.Save(bag, 1, 1)
- target.Load(bag, log)
- comBag = util.wrap(bag, pythoncom.IID_IPropertyBag)
- comTarget = util.wrap(target, pythoncom.IID_IPersistPropertyBag)
- comLog = util.wrap(log, pythoncom.IID_IErrorLog)
- comTarget.Save(comBag, 1, 1)
- comTarget.Load(comBag, comLog)
- if __name__ == '__main__':
- test()
|