如何使用 win32com 处理多个输出参数?

How to handle multiple output parameters with win32com?

我尝试使用签名(.idl 文件)从 com 服务器调用函数:

typedef [v1_enum] enum Mode
{
   Mode1,
   Mode2
}
Mode;

[id(33)] HRESULT GetPosition
(
    [out] double* x,
    [out] double* y,
    [in] Mode positionMode
);

python 代码如下所示:

import win32com.client

obj = win32com.client.gencache.EnsureDispatch('Server.Object.1')

from win32com.client import constants as c
(x,y) = obj.GetPosition(Mode=c.Mode1)
# I tried also x,y=... x=...

我收到错误消息

pywintypes.com_error: (-2147352562, 'Invalid number of parameters.', None, None)

在将参数传递给函数或返回单个输出参数时效果很好,例如:

obj.setValue(42)
x = obj.getValue()

如何处理多个输出参数?

问题确实是函数的签名,它被翻译成:

def GetPosition(self, x=pythoncom.Missing, y=pythoncom.Missing, Mode=defaultNamedNotOptArg):

这意味着函数需要像这样调用:

(x,y)=obj.GetPosition(0,0,Mode=c.Mode1)

非常感谢 DS_London 给出正确的提示。