Python错误集锦:ctypes加载dll文件时出现OSError: [WinError 193] %1 不是有效的 Win32 应用程序

原文链接:http://www.juzicode.com/archives/5060

错误提示:

 ctypes加载dll文件时出现OSError: [WinError 193] %1 不是有效的 Win32 应用程序

C代码:

// juzicode.com/ VX: 桔子code   
#include "stdio.h"
#ifdef __cplusplus
extern "C" {
#endif 

__declspec(dllexport) int addint(int x, int y)
{
	return x + y;
}
#ifdef __cplusplus
}
#endif            

编译成64bit dll:

Python代码:

# juzicode.com/ VX: 桔子code  
from ctypes import *
import os,sys,platform
print('sys.version:',sys.version) 
add_path = os.path.split(os.path.abspath(__file__))[0]+'\\'
pyt = CDLL(add_path+'pytest.dll')  
pyt.addint.restype=c_int     
pyt.addint.argtypes=(c_int,c_int)
z = pyt.addint(10,20)          
print('z =',z) 
==========运行结果:
sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)]
 Traceback (most recent call last):
   File "ctypes-test.py", line 6, in 
     pyt = CDLL(add_path+'pytest.dll')
   File "d:\dev\Python\Python36-32\lib\ctypes__init__.py", line 348, in init
     self._handle = _dlopen(self._name, mode)
 OSError: [WinError 193] %1 不是有效的 Win32 应用程序。

 python是32bit版本:

 

错误原因:

1、32bit python调用64bit dll时,会出现该错误,python的bit版本必须和dll文件的bit版本一致。

 

解决方法:

1、dll文件的bit版本要和python bit版本一致,如果C编译成dll是x86格式,相应的Python才能使用32bit版本:

 重新编译后运行:

sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)]
z = 30

扩展内容:

  1. Python进阶教程m7–混合编程–调用可执行文件
  2. Python进阶教程m7b–混合编程–C语言接口ctypes(1)
  3. Python进阶教程m7c–混合编程–C语言接口ctypes(2)
  4. Python进阶教程m7d–混合编程–代码级扩展
  5. 非工作路径、非入口路径如何导入Python自定义模块

 


 

如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台留言撩我,我会尽我所能为你答疑解惑。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注