我将尽力解决这个问题,但如果我似乎在说些疯狂的话,那几乎可以肯定是因为我不知道某些关键点,所以请纠正我。
我正在Windows环境中编写一个程序,该程序将与具有COM接口的现有应用程序接口,以允许第3方软件与之交互。
我已经阅读了该应用程序的所有文档,并说有一个TLB文件定义了可通过COM使用的功能和数据。
如何在python中使用TLB文件?如何发现应用程序的progID,以便可以与它进行交互(文档中未提供)。
我很迷路。我在Python方面有丰富的经验,但是对于Windows环境中的开发我是完全陌生的。任何帮助将大有帮助。我一直在阅读win32com上的所有文档,但是我仍然不知道该怎么做,因为据我所知,没有人提出TLB文件。
小智 5
提出的问题是将自定义 TLB 文件与要在 python 中开发的 COM 客户端链接起来。我为用 C# 开发的 COM 服务器编写了一个小示例代码,Python 客户端使用“comtypes”包访问相同的代码。下面的代码片段给出:
import comtypes.client as CC
import comtypes
ccHandle = CC.CreateObject("CSharpServer.InterfaceImplementation")
print (ccHandle)
import comtypes.gen.CSharpServer as CS
InterfaceHandle = ccHandle.QueryInterface(CS.IManagedInterface)
print ("output of PrintHi function = ", InterfaceHandle.PrintHi("World"))
Run Code Online (Sandbox Code Playgroud)
上述 python 脚本适用于 C# COM 服务器代码,可从http://msdn.microsoft.com/en-us/library/aa645738(v=vs.71).aspx获取(请参阅文件 1:CSharpServer.cs) 。
小智 2
好吧,自从我做这件事以来已经有一段时间了,而且我无论如何都不是 COM 专家。请阅读Windows 上的 Python 编程中的 COM 章节,了解如何执行此操作。按照示例(针对 Excel 进行尝试)来了解其工作原理。
首先,如果尚未安装PyWin32 扩展,请安装。pythonwin.exe这是为您提供COM 接口模块的包。从这里获取。
然后,您将从 PythonWin 的“工具”菜单中打开“COM Makepy Utility”。浏览已注册的 COM 组件列表(有些是类型库,其他是 DLL),直到找到您拥有的组件(您必须做一些侦探工作)。单击“确定”生成 Python 粘合代码。然后,您需要使用-i命令行参数再次运行它以生成样板代码,以便您的 python 脚本可以使用此胶水。以下是 Microsoft Excel 对象库的 O'Reilly 示例的释义:
import win32com.client
from win32com.client import gencache
gencache.EnsureModule('{00020813-0000-0000-C000-000000000046}', 0, 1, 2)
earlyBound = win32com.client.Dispatch("Excel.Application")
lateBound = win32com.client.dynamic.Dispatch("Excel.Application")
print earlyBound.ActiveCell()
Run Code Online (Sandbox Code Playgroud)
使用早期绑定对象是可选的,但它确实可以提高性能。
找到 ProgID 又是一项侦探工作,尽管这个答案似乎意味着这会很困难。尝试使用 RegEdit 浏览注册表的 HKEY_CLASSES_ROOT 配置单元,看看是否看到看起来有希望的 ProgID。
| 归档时间: |
|
| 查看次数: |
3181 次 |
| 最近记录: |