python程序调用C/C++代码
这篇用来记录在些模拟canoe生成can数据桢工具时遇到的问题,
生成can数据桢,主要分为两个关注点:
1.如何从can信号名获取到can信号的id长度以及信号的起始位,并将信号值按照一定的规则填写进去。
2.由于fcan进行额checksum校验和activecount的规则,这部分算法使用c/c++最好,所以设计到python程序调用c/c++代码(也就是这篇文章)
1.如何用python调用c++代码:
这个是python官方库的cytpes模块的介绍,可以关注一下“fundamental data types”
()
这个提供了一个简单的例子调用c语言代码
()
这个python调用c++指针和指针数组的调用(变量比较乱,要好好看一下才能看出来)
()
这个python调用c代码,传入一个数组给函数,因为传进去的实质是指针,作为参数的数组内容会改变,两个例子
()
()
2.编译c/c++生成动态库
这个是如何创建c++动态库工程的方法
()
这个是如何生成c++动态库的方法
32bit:直接用你的c++编译器32位的即可
64bit:使用mingw-w64编译器(如果没有请看第3条)
无论32bit或者是64bit,生成动态库方法如下:
cd到你的动态库工程里面使用编译命令如下
“gcc -shared -o yourdynamiclibnmae.dll yoursourcefilename.cpp”
最后生成的“yourdynamiclibnmae.dll”文件即为所求
3.python和c的编译器要保持一致,要不都是64bit的,要不都是32bit的
这个是windows下安装mingw-w64的离线安装包,安装完毕请重启电脑
(https://www.cnblogs.com/taming/p/9945389.html)
4.为了方便使用者,不必要每个人都安装python环境,可以将程序打包成exe
()
1> 安装打包库
pip install pyinstaller
2> 在python程序对应的路径打开命令行
pyinstaller -f yourenterfile.py
对应生成的exe在同路径下的dist文件夹里面,名字为yourenterfile.exe
出现这个现象即打包成功
3> 本程序因为涉及到dll,所以对应的dll也要拷贝在exe的目录里面
双击yourenterfile.exe