我想使用Microsoft 开发环境提供的pythoncom和 COM 对象附加到一个正在运行的 Visual Studio 实例的远程进程。到目前为止,我能够从DTE 对象获取实现Debugger接口的调试器对象。但是,我需要访问调试器的Transports属性。它由Debugger2类实现。所以不知何故,我需要 Debugger2 实例而不是 Debugger。在 VB 或 C++ 中,这可以通过简单的强制转换 ( DTE -> DTE2 ) 来完成。但是如何在 Python 中做到这一点呢?
查询接口
方法以异常结束
IID_DTE2 = IID("{2EE1E9FA-0AFE-4348-A89F-ED9CB45C99CF}")
def get_vs_instances():
rot = pythoncom.GetRunningObjectTable()
running_objects = rot.EnumRunning()
while True:
moniker = running_objects.Next()
if not moniker:
break
ctx = pythoncom.CreateBindCtx(0)
name = moniker[0].GetDisplayName(ctx, None)
if name.startswith("!VisualStudio.DTE."):
obj = rot.GetObject(moniker[0])
dte = win32com.client.Dispatch(
obj.QueryInterface(pythoncom.IID_IDispatch))
dte2 = dte._oleobj_.QueryInterface(IID_DTE2)
TypeError: 没有注册支持此 IID 的接口对象
调用
(我从 Python 对象浏览器中获取了 Transports 属性的 DISPID 1101。)
transports = dte.Debugger._oleobj_.Invoke(1101, 0x400, pythoncom.DISPATCH_PROPERTYGET, True)
pywintypes.com_error:(-2147352573,'未找到成员。',无,无)
CastTo也没有帮助,因为错误接口没有出现在与对象相同的库中。 (类似问题)
有什么建议么?