Python编写的com组件发生R6034错误的原因与解决办法

yizhihongxing

Python编写的com组件发生R6034错误的原因与解决办法

原因

导致Python编写的com组件发生R6034错误的原因是使用到了不兼容的C++运行时库,具体来说是Python使用了某些版本的Microsoft Visual C++ Redistributable运行时库,而我们在使用该COM组件时,却在环境变量中设置了另外一个版本的运行时库,如下所示:

R6034 An application has made an attempt to load the C runtime library incorrectly. Please contact the application's support team for more information.

解决方案

解决方案是需要在安装Python时,安装所用的Microsoft Visual C++ Redistributable运行时库,并将其路径添加到系统环境变量中。另外,还需要将这些运行时库的路径添加到Python编写的com组件的.manifest文件中。

以下是两个示例:

示例一

使用Python编写一个简单的com组件,代码如下:

import win32com.server.register


class HelloWorld:
   _reg_clsid_ = "{995EE449-5C51-4F60-83E0-97925D287B9B}"
   _reg_desc_ = "Python Sample COM Server"
   _reg_progid_ = "Python.Sample.Srv"
   _public_methods_ = ["hello"]
   _public_attrs_ = []
   _readonly_attrs_ = []

   def hello(self):
       return "Hello, World!"


def register(server=None):
    if server is None:
        import win32com.server.register
        server = win32com.server.register.UseCommandLine

    win32com.server.register.RegisterServer(HelloWorld)
    print("Server registered successfully")


if __name__ == "__main__":
    register()

运行这个脚本,它会生成一个COM组件的单独的.manifest文件,并将该文件存储在与COM组件同一目录中。可以使用Visual Studio打开这个.manifest文件,然后找到其Windows库依赖项,如下所示:

<dependency>
    <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b" />
    </dependentAssembly>
</dependency>

在使用该COM组件时,需要确保该库可以找到,可以在环境变量中设置该库的路径,或将该库拷贝到系统目录中。

示例二

另一个示例是关于Python 3.7和64位Windows 7之间的问题。Python 3.7默认使用Visual Studio 2017编译器,并且必须依赖于Microsoft Visual C++ 2017 Redistributable运行时库,但不是所有的Windows 7系统都支持这个库。如果出现此类问题,我们可以使用早期版本的Microsoft Visual C++ Redistributable运行时库解决问题,但要注意,必须与使用的编译器版本匹配。

在这种情况下,需要使用以下命令将所需的Microsoft Visual C++ Redistributable运行时库安装到Python的环境中:

C:\Users\user\Downloads>python -m pip install --upgrade pip
C:\Users\user\Downloads>pip install pypiwin32
C:\Users\user\Downloads>pywin32_postinstall.py -install

以上命令将添加早期版本的Microsoft Visual C++ Redistributable运行时库到Python 3.7的环境,然后使用COM组件之前需要先将这些运行时库的路径添加到Python编写的com组件的.manifest文件中。

综上所述,解决方案是安装适当的Microsoft Visual C++ Redistributable运行时库,并将其路径添加到系统环境变量中,然后将库路径添加到Python编写的com组件的.manifest文件中,以保证COM组件的正常运行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python编写的com组件发生R6034错误的原因与解决办法 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python实现进程同步和通信的方法

    实现进程同步和通信的方法在Python中有很多种,下面将分别详细讲解。 进程同步 多个进程同时执行某个任务时,为了避免资源冲突和错误的发生,我们需要对它们进行同步。在Python中常用的进程同步方法有锁和队列。 锁 锁是一种最基本的同步机制,它可以帮助我们保证多个进程或线程在同一时刻只有一个可以访问共享资源。Python提供了一个Lock对象来实现锁。 fr…

    python 2023年5月19日
    00
  • python版本坑:md5例子(python2与python3中md5区别)

    在Python 2和Python 3中,md5模块的使用方式有所不同。下面是一个关于Python版本坑:md5例子的攻略,其中包含了一些示例说明。 Python 2中的md5 在Python 2中,您可以使用md5模块来计算MD5哈希值。以下是一个示例,展示如何使用md5模块: import md5 # 计算字符串的MD5哈希值 hash = md5.new…

    python 2023年5月13日
    00
  • python正则表达式中匹配次数与贪心问题详解(+ ?*)

    Python正则表达式中匹配次数与贪心问题详解(+ ? *) 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、本分、信息提取等。在Python中,我们可以使用模块来操作正则表达式。本攻略将详细讲解Python正则达式中匹配次数与贪心问题,包括正则表达式中的+、?、*等符号的用法,以及贪心问题的解决方法。 正则表达式中的+、?、*符号…

    python 2023年5月14日
    00
  • 使用Python导出Excel图表以及导出为图片的方法

    我来为您讲解一下使用Python导出Excel图表以及导出为图片的方法。 环境准备 在使用Python进行Excel操作之前,需要确保您的电脑已经安装了以下两个库: openpyxl:用于读取和写入Excel文件。 matplotlib:用于处理和绘制图表。 您可以使用以下命令来安装这两个库: pip install openpyxl matplotlib …

    python 2023年5月13日
    00
  • 创建奇数索引之和python

    【问题标题】:creating sum of odd indexes python创建奇数索引之和python 【发布时间】:2023-04-02 22:30:01 【问题描述】: 我正在尝试创建一个等于列表中所有其他数字之和的函数。例如,如果列表为 [0,1,2,3,4,5],则函数应等于 5+3+1。我怎么能这样做?我对 Python 的了解并没有比 w…

    Python开发 2023年4月8日
    00
  • Python 遗传算法处理TSP问题详解

    Python 遗传算法处理TSP问题详解 简介 TSP(Traveling Salesman Problem)是指给定n个城市,求出一条路径,使得一名旅行商人从起点出发,途经每个城市恰好一次,最终回到起点,且路径长度最短。 遗传算法是一种通过模拟进化过程来进行优化问题求解的算法。在TSP问题中,使用遗传算法可以寻求出一条近似于最优解的路径。 解决步骤 初始化…

    python 2023年6月3日
    00
  • 如何使用Python在MySQL中使用唯一键?

    在MySQL中,唯一键是一种用于确保表中每一行的唯一性的特殊列。在Python中,可以使用MySQL连接来执行唯一键查询。以下是在Python中唯一键的完整攻略,包唯一键基本语法、使用唯一键的示例及如何在Python中使用唯一键。 唯一键的基本语法 在MySQL中可以使用UNIQUE关键字来指定唯一键列。以下是创建唯一键列的本语法: CREATE TABLE…

    python 2023年5月12日
    00
  • python结合shell查询google关键词排名的实现代码

    下面是详细的攻略: Python结合Shell查询Google关键词排名的实现代码 在Python中,我们可以结合Shell命令来查询Google关键词排名。本文将对Python结合Shell查询Google关键词排名的实现代码进行详细讲解,并提供两个示例说明。 实现过程 在Python中,我们可以使用subprocess模块来执行Shell命令,并使用Be…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部