【问题标题】:COM error using Python 32 bit on Windows 10 64 bit在 Windows 10 64 位上使用 Python 32 位的 COM 错误
【发布时间】:2018-01-29 22:51:06
【问题描述】:

我正在尝试使用 odoo 9 代码中的 Windows dll。 python类中的代码是:

import win32com.client
import pythoncom

Pythoncom.CoInitialize ()
Zk = win32com.client.Dispatch ('zkemkeeper.ZKEM.1')

当我在 Windows 8(64 位)上运行它时,它可以正常工作,但是当我在 Windows 10(64 位)上作为服务运行它时,我在日志文件中收到以下错误:

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)

我检查了 Regedit;该dll已注册。

当我在同一台 PC 上安装 Python 32 位并直接从控制台运行代码时,它给了我同样的错误。但是,我安装了 Python 64 位并运行了相同的代码,并且运行良好。

谁能告诉我如何使用 odoo 即服务解决此错误?有什么办法可以指向我安装在 PC 上的 64 位 python 而不是内部的?

【问题讨论】:

    标签: python openerp odoo-9 pythoncom


    【解决方案1】:

    尝试用

    添加上下文
    clsctx=pythoncom.CLSCTX_LOCAL_SERVER 
    

    传递给 Dispatch 的参数。

    【讨论】:

    • 效果很好,谢谢!我写道:Zk = win32com.client.Dispatch ('zkemkeeper.ZKEM.1', clsctx=pythoncom.CLSCTX_LOCAL_SERVER)
    【解决方案2】:

    t = win32com.client.Dispatch("TDApiOle80.TDConnection")

    它不适合这个。

    tdc = win32com.client.Dispatch("TDApiOle80.TDConnection",clsctx=pythoncom.CLSCTX_LOCAL_SERVER)
    

    调度 派遣, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)

    【讨论】:

    • 也许可以添加一个小评论来解释为什么这是一个解决方案:)
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2011-04-07
    相关资源
    最近更新 更多