0

我正在尝试将 ActiveX 自动化与 python 一起使用来控制 Audio Precision ATS-2。我正在使用 pywin32 32 位 Windows XP 和 Python 2.7。

我安装了音频精密软件。然后我使用了 makepy实用程序,它在列表中找到了 Audio Precision 并为其创建了一个包装器。一切都很顺利,直到我尝试调用调度函数 abd 我被卡住了。

根据我在网上找到的指南,

win32com.client.Dispatch("Excel.Application")

我应该在“Excel.Application”的区域放什么?

我怎样才能找到这个?

当我使用 OLE/COM 对象查看器时,我在类型库下看到音频精度条目,但我不确定其中的信息如何帮助我。

我自己尝试了几件事,但几乎没有结果。我得到的最好结果是当我输入了CLSIDin dispatch 函数时,我在 makepy 创建的包装对象中找到了它。

win32com.client.Dispatch("{80EC6E76-D94F-48EB-8F4C-05BDD7850BF1}")

这给了我以下错误:

    Traceback (most recent call last):
  File "C:\Python27\Lib\site-packages\win32com\gen_py\APtest.py", line 5, in <module>
    xlApp = win32com.client.Dispatch("{80EC6E76-D94F-48EB-8F4C-05BDD7850BF1}")
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2147221164, 'Class not registered', None, None)

我有:

  • 看了下注册表,ID确实没有在任何地方注册。Audio Precision 条目很少,但看起来没有任何东西可以解决这个问题。
  • 尝试重新安装 Audio Precision 软件,但没有帮助。
  • 试图在音频精度控制(ATS 1.60)软件中注册 dll 对象regsrv32,但都给出了错误并且不会注册(我怀疑这不是我需要注册的正确对象)

我怎样才能解决这个问题?

4

3 回答 3

3

解决此问题的可能方法:

  • 识别您要调用的 Audio Precision ATS-2 dll。例如“C:\path\my.dll”
  • 现在转到注册表并查找“C:\path\my.dll”。你会发现一些东西,但你真正想要的是 CLSID...\InprocServer32 文件夹中的一个条目,或类似的东西
  • 还会有一个 ProgID 条目,例如“AudioPrecison.ATS2”
  • 现在在 Python 中尝试win32com.client.Dispatch("AudioPrecison.ATS2")
于 2012-09-20T15:26:03.203 回答
1

要将 pywin32 模块与 activex 类一起使用,您需要生成一个包装文件。为此,请在 C:\Python27\Lib\site-packages\win32com\client (或您的类似目录)中找到您的 makepy.py 文件。然后运行它,找到你的activex类的NAME然后运行它。它应该在 gen_py 文件夹 C:\Python27\Lib\site-packages\win32com\gen_py 中生成一个包装文件,其中包含 CLSID。然后,您可以像访问 excel 示例一样访问它,使用其他语言的方式也一样。

于 2013-08-08T19:59:51.293 回答
1

我遇到过同样的问题。我不知道从哪里得到它,从我能收集到的是程序CoClass创建的(我相信是 dll 的包装器)的名称makepy(也许我错了)。在我阅读了@NotAUser 的答案后,我找到了它,但是当我检查程序创建的文件时makepy,就在最后一节课之前,(如果创建了多个)我发现了以下内容:

from win32com.client import CoClassBaseClass
# This CoClass is known by the name 'ZKFPEngXControl.ZKFPEngX'
class ZKFPEngX(CoClassBaseClass): # A CoClass

所以,在同一个文件中,有我需要使用的名称。

于 2014-01-22T20:06:55.617 回答