python调用dll函数_关于从加载的DLL调用函数的Python基本问题

我是在搜索和尝试各种各样的例子后提出这个问题的,但我似乎无法从加载的DLL调用函数。我想如果有人能给我举一个例子,我就能理解我做错了什么,并取得一些进展。在

首先,使用Python 3.3.3可以加载DLL,如下所示:import ctypes

ftdi=ctypes.cdll.LoadLibrary('C:\\Python33\\DLLs\\FTCJTAG.dll')

我可以调用一个不需要任何参数的函数,得到一个有意义的数字。但是,经过多次尝试,我还是不知道如何将参数传递给函数(即指针、字符串、数字)。在

例如,在FTCJTAG.h中,我们有这样一个:

^{pr2}$

从DLL程序员指南:FTC_STATUS JTAG_GetDllVersion(LPSTR lpDllVersionBuffer, DWORD dwBufferSize)

This function returns the version of this DLL.

Parameters

lpDllVersionBuffer Pointer to the buffer that receives the version of this DLL.

The string will be NULL terminated.

dwBufferSize Length of the buffer created for the device name string. Set buffer

length to a minimum of 10 characters.

Return Value

Returns FTC_SUCCESS if successful, otherwise the return value will be one of the

following error codes:

FTC_NULL_DLL_VERSION_BUFFER_POINTER

FTC_DLL_VERSION_BUFFER_TOO_SMALL*

所以,我试试这个:version_string = ctypes.c_char * 10

string_ptr=version_string()

ftdi.JTAG_GetDllVersion(string_ptr,ctypes.c_long(10))

我把这个拿回来了:Traceback (most recent call last):

File "C:\Python33\Scripts\FTDI.py", line 5, in

ftdi.JTAG_GetDllVersion(string_ptr,ctypes.c_long(10))

ValueError: Procedure called with not enough arguments (8 bytes missing) or wrong

calling convention

我尝试了很多不同的方法来传递指向函数的指针,或者字符串的长度,但是仍然没有成功。在

有人能提供一个例子,说明如何将这些参数传递给这个函数吗?我确信一旦我看到一个有效的例子,我就可以想出如何调用这个DLL中其余的函数。在

谢谢你的时间!在

编辑:

@Daniel:谢谢您建议使用'windll'而不是'cdll',因为现在上面的函数调用执行得很好。但是,如果我试图调用另一个函数,我会得到一个不同的错误(我也搜索了很久,很难解决):FTC_STATUS WINAPI JTAG_GetNumDevices(LPDWORD lpdwNumDevices);

要调用此函数,我将执行以下操作:x = ctypes.c_ulong

x_ptr = x()

ftdi.JTAG_GetNumDevices(x_ptr)

错误是:Traceback (most recent call last):

File "C:\Python33\Scripts\FTDI.py", line 9, in

ftdi.JTAG_GetNumDevices(x_ptr)

OSError: exception: access violation writing 0x00000000

我得到的结论是,我没有传递指向函数的指针的正确地址,但是经过多次搜索,仍然没有找到答案。我相信这是很简单的事情。:)

再次感谢您的时间!在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 舞伴配对问题_R绘图:配对样本差异表达作图ggpubr

R绘图往期回顾:R绘图:唱一半的歌,画一半的图 gghalvesR绘图:gggibbous,基于ggplot2的Moon chartsR绘图:ggeconodist,基于ggplot2的另类箱图R语言学习系列之“多变的热图”蚂蚁金服在线可视化引擎…

输入引脚时钟约束_最强干货分享 | 时钟树例外(exclude pin、stop pin、non_stop pin、float pin)...

《最强干货分享时钟树例外(exclude pin、stop pin、non_stop pin、float pin)》研究生毕业之前曾发过这篇推文,现在在原来的基础上进行了修正,又添加了一些内容,几乎是压箱底的,现在拿出来分享一下,如果觉得好的话麻烦…

mysql vb_vb连接mysql

环境:xpvb6mysql-5.6.13-win32mysql-connector-odbc-5.2.5-win32一、首先要下载mysql,其次要下载mysql的odbc驱动。odbc驱动的安装很简单,双击就可执行。mysql不用安装,解压就行。但它的服务的启动比较麻烦,需要用到cm…

mac mysql not found_mac下mysql提示command not found解决

原标题:mac下mysql提示command not found解决问题描述输入mysql -u root -p会出现:zsh: command not found: mysql的提示,此时需要配置环境变量。解决方法一1 .打开终端,输入: cd ~2.输入:sudo vim .bash_profile回车执…

mysql数据库删除列数据_MySQL数据库-数据表、以及列的增删改查

1、创建一个表CREATE(创建)TABLE(表)ENGINE(引擎)ENGINEINNODB(引擎)还有很多类引擎,这里只是简单的提一下INNODB引擎,INNODB引擎支持事务(回滚),也就是一个事务执行时如果没有完成数据可以回滚CHARSET(字符编码)CREATE TABLE(创建表)--创建表…

mysql 分区 性能更差_用案例分析MySQL 5.7分区表性能下降的根本原因

前言:希望通过本文,使MySQL5.7.18的使用者知晓分区表使用中存在的陷阱,避免在该版本上继续踩坑。同时通过对源码的分享,升级MySQL5.7.18时分区表性能下降的根本原因,向MySQL源码爱好者展示分区表实现中锁的运用。问题描…

java 数组 截取_Java成长孵化园---认识java(day09)

1、APIApplication Programming Interface应用编程接口一切可以调用的东西,都是API2、基础APIObject、String、StringBuilder/StringBuffer、正则表达式、基本类型的包装类、BigDecimal/BigInteger、Date、SimpleDateFormat3、java.lang.Objectlang包:la…

mysql id还原_一次线上DB问题排查(MySQL、事务、MVCC)

背景在司机数据库中,有一张用于存储司机车型的表,暂且称之为表t。该表结构如下所示:MySQL [comp_epower]> show create table t \G; *************************** 1. row *************************** Table: Create Table: CREATE TABLE …

mysql 可以用多个索引_mysql索引合并:一条sql可以使用多个索引

前言mysql的索引合并并不是什么新特性。早在mysql5.0版本就已经实现。之所以还写这篇博文,是因为好多人还一直保留着一条sql语句只能使用一个索引的错误观念。本文会通过一些示例来说明如何使用索引合并。什么是索引合并下面我们看下mysql文档中对索引合并的说明&am…

mysql三种引擎_MySQL常见的三种存储引擎

原文连接:https://www.cnblogs.com/yuxiuyan/p/6511837.htmlhtml简单来讲,存储引擎就是指表的类型以及表在计算机上的存储方式。数据库存储引擎的概念是MySQL的特色,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区…

django win下安装mysql_python测试开发django-8.windows系统安装mysql8教程

前言MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习。windows7/windows10mysql-8.0.11-winx64下载安装包也可以在此页面【https://dev.mysql.com/downloads/file/?id476233】,进入页面后可以不登录。后点击底…

php mysql ajax 注册验证 实例_Ajax小实例   用户注册异步验证

简介51cto的程序员应该都有sina微博吧!你会发现当你更改新浪会员名称,输入用户名Tab后,光标焦点移动到密码输出框时,用户名输出框的后面,就已经显示出了验证。验证信息是:你的用户名是否唯一,因…

同一事务中未提交的写能读到吗_03、MySQL事务的隔离性分析

事务可以用来保证数据库的完整性:要么都做,要么不做。在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务&a…

python软件管理系统_conda:基于python的软件管理系统

python语言在发展的过程中,经历了python2到python3的迁移,对应的包也出现了多个版本。如何在一台服务器上同时安装不同版本的python,不同版本的package, 而且不互相干扰,是一个令人头痛的问题。为了解决这个问题,首先是virtualenv…

vscode远程Mysql数据库_windows系统vscode远程调试mysql

准备工作本文目标是可以从 WindowsVSCode 环境远程访问 Linux 的 mysql源码, 以及执行 GDB 远程调试首先准备以下软件在本地机器上:安装VS Code目前最新版本支持 Remote - Development 插件安装 VSCode 扩展 “Remote - Development”, 方法是左下角管理(⚙) ->扩展, 直接搜…

mysql免安装出现1067_mysql,免安装,1067错误

设置密码关闭正在运行的MySQL。2.打开DOS窗口,转到mysql\bin目录。3.输入mysqld --skip-grant-tables回车。如果没有出现提示信息,那就对了。4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。5.输入mysql回车&#x…

python外汇兑换代码_python爬取人民币汇率中间价

python爬取人民币汇率中间价,从最权威的网站中国外汇交易中心。首先找到相关网页,解析链接,这中间需要经验和耐心,在此不多说。以人民币兑美元的汇率为例(CNY/USD),脚本详情如下:windows:# -*- …

python捕捉线程错误_Pythonrequests多线程抓取出现HTTPConnectionPoolMaxretiresexceeded异常...

问题: Python requests 多线程抓取 出现HTTPConnectionPool Max retires exceeded异常描述:主要代码如下:import threadingimport requestsdef get_info():try:res requests.get(http://www.xxx.com/test/json)if res.status_code 200 and res.text ! …

java io 文件路径_【IO流】java中文件路径(相对路径、绝对路径)相关类及方法...

1. URL菜鸟教程:Java URL处理 通常推荐对http等协议进行使用,若操作(file:)部分属性将无意义,建议getFile()。相关:URLConnections 类 可以打开连接进行IO 通过getResource方法可以获得相对于classPath的文件的URL2. FileTestvoid…

java classpath顺序_JVM中类加载顺序及classpath简介

昨天,看一个build Standalone中databrusher的一个脚本,发现一个Java类似乎没有在classpath中,好像也可一直运行了。很疑惑,问了对应的开发同学,然后自己好好看了下它的代码,才知道了原理。命令是&#xff1…