python 调用DLL的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 调用DLL的问题相关的知识,希望对你有一定的参考价值。

调用DLL代码如下:
----------------------------------------------------------------------------
#coding:utf-8
import ctypes
dll = ctypes.windll.LoadLibrary('getcode.dll' )
def localgetcode(pic):
try:
code = dll.local(pic,'yunfile.cds','hycsxs')
code = ctypes.string_at(code, -1)
if code=='get error' or code=='load error':
return ''
return code
except:
return ''
-------------------------------------------------------------------------
主程序启动20个线程去调用这段代码,时间长了主程序运行结束时经常会出现内存错误,这是怎么回事?运行的时间短的话就没有这个问题....(PS :上面的getcode.dll是我自己写的DLL这个会调用另外一个叫"AntiVC.dll")
求高人指教。。。。。。

那就是有内存泄露。内存没有释放。原因可能是多种。一种是你的DLL或者是AntiVC出了错。另外一种是ctypes出错。其中返回的内容没有释放内存。也许只有10个字节,但是长期积累还是很可观。

如果解决这个问题,就是稳定的程序,怎么用都不会坏。

还有一个保守的办法。如果你调用DLL的频率不是特别快。比如每秒不超过2000次。那么你可以将这个功能封装在一个服务进程里。线程再通过接口去访问。该 服务进程即使内存溢出崩溃了。也会自动重新启动。这样你的20个线程基本上只需要重试几次,等服务进程重新启动完成后,就可以获得结果。基本不影响使用。操作系统也很安全。因为进程退出后,所有的遗留错误都会清空。
参考技术A 我碰到的问题是django 调用dll 多个同时调用崩溃 ,我可以在运行dll 的方法添加一个线程锁就可以了

python调用c的dll文件

这个问题研究了好久,看了n个博客,但是一直出错,主要集中在生成dll的时候,自己生成的总是不可执行,今天无意间看到了一个,发现正好可以解决我的问题,分享给大家http://blog.sina.com.cn/s/blog_62c832270101d92u.html

里面有一个没有搞懂的地方,就是CDll里面对于生成的dll的填写,我已经把它放在python目录Dlls下了,可是还要写全路径才对,此问题求解。

关于调用c++的目前没有发现什么好的办法。

以上是关于python 调用DLL的问题的主要内容,如果未能解决你的问题,请参考以下文章

请教python调用dll动态库的传参问题

创建 可以被python调用的 dll

请教python调用dll动态库的传参问题

怎样用python调用dll

python怎么调用c#的dll

在 Python 中从 dll 调用函数