我试图在Linux上运行的Python脚本中从Kernel32.dll调用一些函数。正如Johannes Weiß指出的How to call Wine dll from python on Linux?我正在加载内核32。动态链接库.so通过ctypes.cdll.LoadLibrary()而且装得很好。我可以看到kernel32已加载,甚至还有GetLastError()函数。不过,每当我试图调用函数时,都会得到segfault。在import ctypes

kernel32 = ctypes.cdll.LoadLibrary('/usr/lib/i386-linux-gnu/wine/kernel32.dll.so')

print kernel32

#

print kernel32.GetLastError

# <_funcptr object at>

gle = kernel32.GetLastError

# OK

gle_result = gle()

# fails with

# Segmentation fault (core dumped)

print gle_result

首先,我想称之为惯例差异,但似乎没什么大不了的。我以测试简单函数GetLastError函数结束,没有任何参数,但我仍然得到分段错误。在

我的测试系统是Ubuntu12.10、Python2.7.3和wine-1.4.1(一切都是32位)

升级版

我继续我的测试,找到了几个函数,我可以通过ctypes调用而不使用segfault。例如,我可以命名Beep()和GetCurrentThread()函数,许多其他函数仍然给我segfault。我创建了一个小的C应用程序来测试kernel32。动态链接库.so库中没有python,但我得到的结果基本上是相同的。在

^{pr2}$

我试图对Sleep()函数使用不同的调用约定,但也没有成功。当我比较Wine源代码中的函数声明\实现时,它们本质上是相同的

声明HANDLE WINAPI GetCurrentThread(void) // http://source.winehq.org/source/dlls/kernel32/thread.c#L573

BOOL WINAPI Beep( DWORD dwFreq, DWORD dwDur ) // http://source.winehq.org/source/dlls/kernel32/console.c#L354

HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) // http://source.winehq.org/source/dlls/kernel32/module.c#L928

VOID WINAPI DECLSPEC_HOTPATCH Sleep( DWORD timeout ) // http://source.winehq.org/source/dlls/kernel32/sync.c#L95

WINAPI is defined to be __stdcall

不过,有些是有用的,有些是不行的。据我所知,这些源代码是针对kernel32.dll文件和kernel32的。动态链接库.so文件是一种代理,它应该提供对kernel32.dll for linux代码的访问。也许我需要找到kernel32的确切来源。动态链接库.so归档并查看声明。在

有没有什么工具可以让我看一下里面的.所以文件并找出使用了什么函数和什么调用约定?在

python调用动态链接库windows_用win从python ctypes调用标准windows.dll的Segfault相关推荐

  1. python通过ctypes调用海康网络sdk取流

    项目中经常需要使用海康的网络摄像头,做视频图像算法经常会用到rtsp流,但是rtsp一般很难保证实时性且解码效率不能保证.通过海康给的python的demo,对模块进行封装以方便python像调用op ...

  2. JNative 调用动态链接库 调用动态链接库函数

    假设我有一个叫test.dll的动态库,其中有一个函数如下:     extern "C" int add(int* a,int* b,int* c,int d,char* Pic ...

  3. python调用ctypes中windll中的方法超时处理_python中使用ctypes调用MinGW生成的动态链接库(dll)...

    关于gcc编译dll的我就不说了,网上举例一大堆,下面以g++为例. 假设有一个test.cpp文件如下: extern "C" { __declspec(dllexport) d ...

  4. python调用动态链接库传送protobuf数据。

    什么是protobuf protobuf是Google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多.开发者定义类似于 ...

  5. Python 调用动态链接库

    Python 调用动态链接库 ctypes是Python调用c的动态链接库的一个内置模块. 通过 CMake 构建动态链接库 项目结构 ├── CMakeLists.txt # CMake 构建配置文 ...

  6. python和c-python和C的如何实现互相调用?

    本文和大家分享的是python和c的互相调用相关知识,一起来看看吧,希望对大家学习python有所帮助. 最近在考虑基于udp做一个用于网游战斗中的数据同步协议,为了前期测试数据,决定先做一个外部的代 ...

  7. python能调用身份证读卡器吗_用Python在Linux下调用新中新DKQ-A16D读卡器,读二代证数据...

    1.背景 最近在研究二代证读卡器,手头上的设备是新中新DKQ-A16D,在官网(https://www.onecardok.com.cn/download)逛了一圈,发现Win下的示例,浏览器插件很多 ...

  8. python隐藏源码,生成pyd文件并调用的完整过程

    目录 ​pyd 特点及生成方式​ 首先需要在 ​demo.py 同目录下新建个 setup.py 文件,具体代码如下 在生成之前或许我们需要先做一个事情,那就是安装vs_buildtools 在命令行 ...

  9. python使用ctypes调用c/c++函数

    python调用c/c++函数 工具 一 生成动态链接库文件 1. 创建头文件 2. 项目属性选择配置类型为动态库 3. 选择Debug x86,启动调试 4. 无视以下报错信息 5. 找到生成的dl ...

最新文章

  1. Struts2学习第二天——动态方法调用
  2. openresty开发系列31--openresty执行流程
  3. 使用AutoIt实现UI自动化上传附件
  4. JavaWeb 安全问题及解决方案
  5. Maven 系列 3:如何在 Eclipse 中集成配置 Maven(以 apache-maven-3.6.2、eclipse-jee-2019-09-R-win32-x86_64 为例)
  6. 算法的时间复杂度(python版容易理解)+常用的时间复杂度、python代码--数据结构
  7. html5复习分类,HTML5考试复习资料.doc
  8. Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is allowed betwee...
  9. Android Fragment + ViewPater + Fragment嵌套Fragment实战
  10. 数学之美 第二版 pdf
  11. App首次安装 - 授权网络访问的坑
  12. 山东大学_网络攻击与防范(林)_名词解释
  13. 权限系统设计学习总结(1)——多租户的RBAC权限管理
  14. JAVA创建内部类对象
  15. Google reCaptcha验证码无法显示解决方案
  16. 2016 server win 假死_Windows Server下Apache假死堵塞卡死无响应解决方法
  17. 技术小卡系列之Eclipse 窗口说明
  18. 易点云冲刺上市:亏损收窄、债务高企,租电脑的生意能否长久?
  19. 递归算法之蜜蜂路线问题
  20. Java Z 字形变换

热门文章

  1. php如何做熔断降级,spring cloud 如何实现服务熔断服务降级
  2. 树莓派python3.7_[Linux] 树莓派编译python3.7.4
  3. Echart常用效果(一)
  4. linux下lua bit模块的安装
  5. RabbitMQ使用详解
  6. linux上进程状态查询
  7. java多线程问题_【java 多线程】多线程并发同步问题及解决方法
  8. nginx 图片站点加访问权_nginx配置访问图片路径以及html静态页面的调取方
  9. windows进程管理器_软件进程自动重启一遍又一遍……你需要这款自动杀进程的小公举ProcessKO...
  10. mysql myisam转innodb_Mysql MyISAM数据库批量转换表引擎为Innodb