天坑!c++调用python,遭遇R6034问题
起源:
AllMyTube下载核心,是c#组件调用c++dll,在dll中初始化Python运行环境。在工作目录有msvcr90.dll文件时,程序运行会弹出如下错误:
R6034。
---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Runtime Error! Program: E:\... R6034 An application has made an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information. ---------------------------
确定
---------------------------
之所以与msvcr90.dll有关,是在测试中加减关联dll发现,未及原理,发布时不带msvcr90.dll。
以为解决问题,其实掩耳盗铃。
一、幽灵一样的msvcr90.dll
因为忘记验证,在环境变量任一路径下有msvcr90.dll,亦会弹此错误。上Everything,找不同版本msvcr90.dll做替换问题依旧。
娘希匹!
谷歌之,大抵是改此文件名或删除,与我发现类似,未有彻底解决方法。我们不能删除用户机子上环境变量路径中此文件,办不到。
说是有些第三方软件,把msvcr90.dll装在系统Path目录或装在它自己目录而把其路径加入系统Path中。
箭在弦上,不得不发,重拾c++,单步追之……
二、可疑的_AES.pyd
留意编译信息,发现加载_AES.pyd组件时,有加载python27.dll及msvcr90.dll行为,会不会它搞的鬼?
单步跟之,异常信息如图:
托管调试助手“LoaderLock”在“E:\Apps\DownloadCore\VideoDownloader_v3\win\bin\Debug\Demo.exe”中检测到故障。
其他信息: 正试图在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
且其为反复触发。
代码中我找到了调用位置,加try...catch(...)屏蔽,无效:
try{
pyModule = PyImport_ExecCodeModule("WondershareDownloader", pyScript);
}
catch(...){
}
怎么办……
我们应用之python3环境,它却依然去找python27.dll,不该。
Copy python27.dll至运行目录,亦无效;改_AES.pyd名,可以,不再弹异常框。
就它丫的鬼!但cookies解密需用此库,如之奈何?
三、无耻的_AES.pyd
好,即如此,想替代方案。上Everything,找到另个_AES.pyd,Copy过去:
29kb那个,是有问题的,30kb这个,没有问题。
上PyCharm,单步验证此.pyd文件,看替换之后,解密是否如常工作:
当然不能……
欲用AES加解密功能,尚需找路。
以PyCharm启动Python2环境调试无事,启动Python3环境,亦是上面错误。而c++环境,不过是给异常做个转发。
p2:
p3:
直接以python.exe运行之:
此为问题之源也!
再看_AES.pyd依赖关系:
无耻之甚,扰人之极!
MSVCR90.DLL赫然在列。copy相关文件入执行目录,亦不解决问题,算了吧,不挣扎了……
四、折衷方案
肯定是其所用的关联dll未全或版本不对所致。不找了,不麻烦了!
去了这个_AES.pyd吧,解决眼前问题最重要!有两个网站用到其解密,待时间从容,再做解密研究。
Google之,stachoverflow上面,亦是处理msvcr90.dll,治标不治本,无多大参考意义
参考资料:
Runtime error R6034 in embedded Python application
C++调用Python2.7出现R6034错误. - 学习笔记 - CSDN博客
天坑!c++调用python,遭遇R6034问题的更多相关文章
- 调用python 报R6034 错误
R6034 指的是:"An application has made an attempt to load the C runtime library incorrectly. Please ...
- cpp 调用python
在用cpp调用python时, 出现致命错误: no module named site , 原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...
- c调用python
#include <Python.h>//python33(python2.x有几个函数不对应) /* PyImport_ImportModule 导入一个Python模块并返回它的指针 ...
- linux+php+apache web调用python脚本权限问题解决方案
lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用 ...
- linux+php+apache web调用python脚本权限问题
lamp : linux + apache + mysql + php 在近期项目中使用 linux + apache + php调用python脚本是出现以下权限问题: build/bdist.li ...
- C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...
- PHP 调用Python脚本
上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...
- C++中调用Python脚本
C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...
- java调用python代码
同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...
- C++调用python
本文以实例code讲解 C++ 调用 python 的方法. 本文在util.h中实现三个函数: 1. init_log: 用google log(glog)初始化log 2. exe_command ...
随机推荐
- mvc中让路由忽略带后缀的路径文件
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/ ...
- GSM与GPRS的区别
1. GSM是全球移动通讯系统(Global System for Mobile Communications)的简称 2. GPRS是通用分组无线业务(General Packet Ra ...
- 获取geometry边界范围的示例代码
根据sqlserver geometry数据定义获取空间类型边界范围 --获取指定街道边界的xy最大最小值 ) '--街道编码 create table #temp_point(id int iden ...
- WinForm控件--DotNetBar--SuperGridControl
//SuperGridControl控件初始化 private void ResetLayout(SuperGridControl SGC) { GridPanel panel = SGC.Prima ...
- Postman Could not get any response
在使用postman时遇到的小问题,记录一下: 报错信息如下: Could not get any response There was an error connecting to https:// ...
- Git命令行入门
安装 下载与文档地址:https://git-scm.com/book/zh/v2 我使用的是linux系统,故使用命令行安装Git # apt-get install git 配置 # git co ...
- IDEA tomcat8 控制台日志乱码
瞎扯一句:由于tomcat7之前编码默认都是GBK,tomcat8之后都是UTF-8 1.在idea64.exe.vmoptions(我装的是64位的)最后加入 -Dfile.encoding=UTF ...
- Crontab 执行时没有环境变量!
Crontab 执行时没有环境变量! Crontab 执行时没有环境变量! Crontab 执行时没有环境变量! 重要的事情说三遍,浪费我半天时间去找问题!! 非系统默认工具,执行时候需要加全路径!!
- 我与OO (1)
前言 “真正的勇士敢于面对惨淡的人生,敢于面对淋漓的鲜血” 我是谨慎拜读了鲁迅先生的名言,怀着崇敬的精神去接触这门课程的. 而当我真的经历了这门课程以后,我才发现,刘和珍君这样的觉悟,我们普通人,果然 ...
- eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)
Eclipse 构建 JPA Project 时,需要指定 JPA的实现,如:下图中的EclipseLink 2.7.3,这其实是一个自定义的用户库. 看看,这个用户库包含persistence接口和 ...