ctypes怎么查看dll有哪些函数
您可以使用 ctypes 模块提供的 windll 或 cdll 属性来加载 DLL 并使用 dir() 函数列出其中的函数。
以下是一个简单的示例:
import ctypes
# 加载 DLL
mydll = ctypes.windll.LoadLibrary("MyDll.dll")
# 列出 DLL 中的函数
print(dir(mydll))
在这个示例中,我们使用 ctypes.windll.LoadLibrary() 函数加载 DLL,并使用 dir() 函数列出其中的函数。windll 属性用于加载使用 Win32 API 调用约定的 DLL,cdll 属性用于加载使用 C 调用约定的 DLL。
运行这个脚本,它将加载 DLL 并输出其中的函数列表。
请注意,如果您的 DLL 使用了 C++,则需要在 DLL 中使用 extern "C" 包裹函数声明,以确保 C++ 名称修饰不会影响导出函数的名称。
总结一下:
-
使用 ctypes 模块提供的
windll或cdll属性可以加载 DLL 并列出其中的函数。 -
使用
ctypes.windll.LoadLibrary()函数加载 DLL。 -
使用
dir()函数列出 DLL中的函数。 -
如果您的 DLL 使用了 C++,则需要在 DLL 中使用
extern "C"包裹函数声明,以确保 C++ 名称修饰不会影响导出函数的名称。
c++编译问题
无法打开文件源python.h
一般因为includepath没设置,在c++插件设置成C:\msys64\mingw64\include\python3.10
后重启vscode好了。
include后用引号和尖括号的区别
在 C++ 中,include 指令用于在源代码中引入头文件。include 指令有两种形式:使用引号和尖括号。
- 使用引号
使用引号形式的 include 指令,如下所示:
#include "header.h"
使用引号的 include 指令告诉编译器在当前源文件所在目录下查找头文件。如果头文件不在当前目录下,编译器会继续在其他用户指定的目录中查找。
- 使用尖括号
使用尖括号形式的 include 指令,如下所示:
“`
#include <header.h><!–autointro–>
网页测试程序splinter 和 selenium
splinter和selenium都是用于测试网页的程序,可以模拟浏览器操作,进行自动化测试,可以用于爬虫,自动抢票,网页自动化处理等。Selenium是Splinter的底层,Splinter是Selenium的一个上层封装。使用splinter和selenium时也会用到和html,css相关的使用。
文档
splinter
https://splinter.readthedocs.io
selenium
https://www.selenium.dev/selenium/docs/api/py/api.html
https://selenium-python.readthedocs.io/
https://selenium-python-zh.readthedocs.io/en/latest/
splinter 可实现功能要比selenium少很多,例如对于name.fill的操作,splinter就和Selenium不同,如下所示。
splinter
browser.fill('username', 'janedoe')
Selenium
elem = browser.find_element.by_name('username')
elem.send_keys('janedoe')
```<!--autointro-->
读取数据readlines()去掉换行符
读取数据readlines()去掉\n
样式
f = open("file.txt",encoding='utf-8')
date = f.readlines()
print(date)
f.close()
# 结果: ['我是主帅\n', '我来自河北\n', '我喜欢中国']
第一种方法,用splitlines()去除
f = open("file.txt",encoding='utf-8')
date = f.read().splitlines()
print(date)
f.close()
#结果:['我是主帅', '我来自河北', '我喜欢中国']
这种方法用到了splitlines():
Python splitlines() 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
第二种方法,
f = open("file.txt",encoding="utf-8")
date = f.readlines()
date = ''.join(date).strip('\n')
print(date)
f.close()
# 结果:
# 我是主帅
# 我来自河北
# 我喜欢中国
用join将列表转换为新的字符串,再用strip()去掉空白符(\n)
join():
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
strip():
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
encoding只是编码问题
conda-PackagesNotFoundError的解决办法
解决方法一:将conda-forge添加到搜索路径上
首先,当出现这种报错时,应该首先尝试使用以下命令将conda-forge channel添加到你的channel列表中:
conda config --append channels conda-forge
它告诉conda在搜索软件包时也要在conda-forge channel上查看。
然后你就可以尝试利用如下命令再次安装
conda install 包名
原因在于:channel可以看成是托管python包的服务器,当无法通过标准channel获得python包时,社区驱动的conda-forge通常是一个很好的地点。大部分问题都可以利用这条语句解决。
GPT4体验
写3篇flask快速入门搭建一个简单的技术网站教程
第一篇:Flask 环境搭建与基本结构
1.1 安装 Flask
在开始之前,请确保已安装 Python。接下来,我们将使用 pip 安装 Flask:
pip install flask
1.2 创建 Flask 项目结构
创建一个名为 my_website 的文件夹,作为我们的项目根目录。在根目录下创建以下文件:
app.py:主程序入口。templates/:存放 HTML 模板文件的文件夹。static/:存放静态资源(CSS、JavaScript 等)的文件夹。
项目结构如下:
my_website/
├── app.py
├── templates/
└── static/
1.3 编写 Flask 应用
1.3.1 初始设置
在 app.py 中,我们将初始化 Flask 应用,并设置路由:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
1.3.2 编写 HTML 模板
在 templates 文件夹中,创建一个名为 index.html 的文件,然后添加以下内容:
<!DOCTYPE html><!--autointro-->
python虚拟环境virtualenv和conda
首先使用conda创建虚拟环境
conda create -n env_pandas
激活虚拟环境
conda activate env_pandas
python使用zlgcan时候打开设备失败
最终原因是运行库的问题,安装之后好了。
打开设备失败
问题描述
运行demo,发现打开设备失败,如图

解决方法
1.是否有其它设备已经打开了占用了此CAN卡,可以试一下先关闭其它软件,单独运行。
2.驱动是否安装,比如USBCAN、PCIe等需要安装驱动的CAN卡,可以在设备管理器上面查看是否正确安装驱动,或者使用ZCANPRO软件启动设备
3.打开设备选择的型号是否正确,调用opendevice函数的设备类型是否正确。
4.zlgcan.py里面loadlibrary是否调用的是同级目录的方法,即:“./zlgcan.dll”; 并且同级目录下有没有拷贝最新的zlgcan.dll和kerneldlls文件夹(函数库必须和python同架构,比如python是32位,就需要32位的库;如果python是64位,就必须64库)
最新函数库的下载链接:https://manual.zlg.cn/web/#/152?page_id=5332
5.有可能运行库缺失,下载并安装运行库合集,请安装VC++运行环境:- 微软常用运行库合集,点击下载(35M)
python日期格式转换
import time
# timeNum=1566366547705#毫秒时间戳
timeNum= 1601974038267
timeTemp = float(timeNum/1000)
tupTime = time.localtime(timeTemp)
stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime)
print(stadardTime)
```<!--autointro-->