On 12/12/2012 2:48 AM, bitbucket wrote:
On Monday, December 10, 2012 8:16:43 PM UTC-5, Mark Hammond wrote:
"out" params are best supported if the object supplied a typelib -
then Python knows the params are out and does the right thing
automagically. If out params are detected, the result of the
function will be a tuple of (real_result, out_param1, ...)

Even if no typelib is supported, you can access them with a little
pain via the win32com.client.Dispatch() object.  You might like to
follow up to the python-wi...@python.org mailing list where many
people will be able to help.

HTH,

Mark

Mark, thanks for the reply.  In this case, I have a type library and
attempted to use MakePy but it doesn't seem to be working as
expected.

I was reading through CH12 of your Python Programming on Win32 book
(http://oreilly.com/catalog/pythonwin32/chapter/ch12.html).  I was
hopeful given your description of MakePy that I could get this to
work.  It appears that you're saying MakePy will convert "byref" args
in a function over to return values.

For example, the IDL in the server includes the following 3
functions.

[id(1)] void ShowMessage(BSTR msg); [id(2)] void GetSettingValue(BSTR
settingName, BSTR* settingValue); [id(3)] void SetSettingValue(BSTR
settingName, BSTR settingValue);

The thorny one is the GetSettingValue since it takes the out param.
When I run MakePy, it generates the below.

def ShowMessage(self, msg=defaultNamedNotOptArg): return
self._oleobj_.InvokeTypes(1, LCID, 1, (24, 0), ((8, 0),),msg )

def GetSettingValue(self, settingName=defaultNamedNotOptArg,
settingValue=defaultNamedNotOptArg): return
self._oleobj_.InvokeTypes(2, LCID, 1, (24, 0), ((8, 0), (16392,
0)),settingName , settingValue)

def SetSettingValue(self, settingName=defaultNamedNotOptArg,
settingValue=defaultNamedNotOptArg): return
self._oleobj_.InvokeTypes(3, LCID, 1, (24, 0), ((8, 0), (8,
0)),settingName , settingValue)

I noticed that the argument type is different for the out param
(16392 instead of 8).  However, it doesn't appear to me that its
generating return values instead of args (though I'm not very
experienced in python).

I tried invoking these in python.  The ShowMessage and
SetSettingValue work great.  I can't get the GetSettingValue to work
though.  Perhaps there's a different syntax I need when using the
MakePy generated code?

Seeing the "real" return value is void, it should just be a matter of:

settingValue = ob.GetSettingValue("settingName")

Mark


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to