码迷,mamicode.com
首页 > 编程语言 > 详细

Python调用dll

时间:2015-03-29 20:57:08      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

  Python的运行效率并不高,不过我们可以通用调用c函数或者dll来提高效率。

  下面简单的写一个dll:

  MyDll.h

 1 #ifndef MYDLL
 2 #define MYDLL
 3 #ifdef MY_DLL
 4 #define MY_DLL extern "C" _declspec(dllimport)
 5 #else
 6 #define MY_DLL extern "C" _declspec(dllexport)
 7 #endif
 8 
 9 MY_DLL int fun();
10 
11 #endif

  MyDll.cpp

1 #include"MyDll.h"
2 
3 
4 int fun()
5 {
6     return 10;
7 }

  然后生成dll文件使用Python调用fun函数。

 1 from ctypes import windll
 2 
 3 
 4 def dllfun():
 5     ll=cdll.LoadLibrary("E:\\Mydll.dll")
 6     return ll.fun()
 7 
 8 
 9 if __name__=="__main__":
10     print(dllfun())

输出结果:

>>>
10
>>>

PS:

①其中遇到了一个错误:OSError: [WinError 193] %1 不是有效的 Win32 应用程序,这是使用64位的Python引起的,如果想解决这一问题可以使用32位的Python或者编译64位的dll(前者应该是更有具有兼容性的解决方案)。

②其实我原本在fun函数中写得是"std::cout<<"PRINT"<<std::endl;",不过运行结果并没有输出,具体原因尚不清楚。

③如果是_stdcall格式的API请将cdll改成windll,否则使用有参数函数时会出现:ValueError: Procedure probably called with too many arguments (8 bytes in excess)。

Python调用dll

标签:

原文地址:http://www.cnblogs.com/lightzl/p/4376225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!