python - Pythoncom 接口转换
问题描述
我想使用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也没有帮助,因为错误接口没有出现在与对象相同的库中。 (类似问题)
有什么建议么?
解决方案
推荐阅读
- php - 如何在 PHP 中的“addApiParam”上使用 foreach 循环?
- android - 如何从异步任务中的“onPostExecute”中删除事件监听器
- ios - 保存数据后。然后弹出视图控制器
- mongodb - 如何根据条件将数据框插入/更新到 Mongodb
- sas - 如何从库中的所有表中提取一些信息?
- mysql - 根据其他 2 张桌子返回可用房间
- java - 尝试在空对象引用 onCreateView(Fragment.java) 上调用虚拟方法 RecyclerView
- javascript - 无法通过节点休息应用程序上的猫鼬连接到 mongodb-altas,连接失败:“UnhandledPromiseRejectionWarning:错误:连接 EACCES”
- java - 从 ImageView 而不是 Drawable 获取图像
- php - 如何理解 DLE 中的路径?