首页 > 编程知识 正文

python中找不到win32api,python调用win32dll的步骤

时间:2023-05-05 20:15:34 阅读:251523 作者:907

一、问题及解决描述:

当使用c++生成的dll给python使用,python使用ctypes调用dll时出现不是有效的win32应用程序

原因:python的编译环境有32位和64位,而c++编译的dll动态链接库也是有32位和64位平台之分

解决方法:如果dll链接库是别人提供的,那么只能创建新的虚拟环境,安装python解析器与dll支持的平台环境一致(此方法此处不解释),如果dll是自己编译的,那么只需要更改编译生成的支持平台即可(使用vs2012编译)

二、使用vs2012生成dll

此处引用:https://blog.csdn.net/kylett/article/details/84290853的博客
1.源文件中创建cpp文件

#define DLLEXPORT extern "C" __declspec(dllexport)#include "stdio.h"DLLEXPORT wchar_t* sum(wchar_t *str, int b, float f) { static wchar_t a[] = L"你好,world";static wchar_t szBuffer[100];float x = b + f;swprintf(szBuffer, 255,L"%s,%s,%f", a, str, x);return szBuffer;}

2.编译生成dll文件
编译前需要配置新的管理器(默认是win32平台)->选择配置管理器

点击新建:

选择x64->确定后编译当前的代码即可:

三、创建python代码,调用dll文件

1.如果使用的是win32编译成的dll文件,在使用python(63位)调用时,将出现以下报错信息:

2.如何确定python支持的平台:

3.代码如下:

import platformplatform.architecture()

确定没有问题后,开始调用dll文件进行测试:

from ctypes import *dll = CDLL('Dll_To_Python.dll')dll.sum.argtypes = [c_wchar_p,c_int,c_float]dll.sum.restype = c_wchar_pstr = "come in";pchar = dll.sum(str,2,3.215)print(pchar)

此处依旧引用:https://blog.csdn.net/kylett/article/details/84290853的博客

四、总结

1.知道dll支持的平台
2.知道python解析器支持的平台
3.编写dll文件
4.引用dll文件

五、扩展

如何将OpenCV的功能和自己写的算法使用c++封装好成dll动态链接库文件给python使用?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。