ERROR:python 引用 DLL 出现 %1 不是有效的 Win32 应用程序

一、问题及解决描述:

当使用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 platform
platform.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_p
str = "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使用?

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值