将C++函数编译为动态链接库并用python调用
环境:win10 | vs2019 | python3 | ctype
① 创建 dll 项目
② 创建自己的头文件和源文件,自动生成的不用管(这样后面会有一个报错,改下设置就 ok l) 
③ 需要导出让 python 调用的函数加一些关键字声明,其余的函数不用管,加的原因网上很多,不多说 将C/C++编译为动态链接库并供python调用其函数_潇洒过路客的博客-CSDN博客_编译成动态链接库以便python环境下可以被调用 
④ 运行后,会报错,这个报错正常,生成成功就ok了 这里会报错 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“ 属性-预编译头-不使用预编译头 使用vs2019用c++创建dll库_xujianjun229的博客-CSDN博客_vs2019创建c++dll 
运行后的界面 
⑤ 我用的release ,所以生成的 dll 在release 里面,调用的库不同这里的dll数量也不同 
⑥ 把 Dll1.dll 以及 他依赖的其他 dll 一起放到 python 脚本的同级目录(可以把release文件夹所有dll复制过去),不然可能会报错 找不到某个 dll 
⑦最好在 c++ 设置一下输出,看一下c++接到的 数据是否正确 我这里需要传几个路径,所有用了一个结构体。注意c++ 和 python 之间的数据转换问题 python 使用ctypes调用C/C++ dll - 我来乔23 - 博客园 (cnblogs.com)
地址不对会报错: OSError: [WinError -529697949] Windows Error 0xe06d7363
⑧整个过程各种踩坑 留个坑:我这里的函数没有返回值,当我试着返回一张图时,会报错: OSError: exception: access violation reading 0xFFFFFFFFFFFFFFFF 有说是内存的问题,不知道怎么破???
|