通用情况下,没有什么好办法能把python编译成dll,因为python是解释型语言,dll是编译后的二进制文件,2者不在一个次元。除非你把python的解释器也打包进你的工程,并在你的exe里调用。
但某些特殊情况下,也有把python的代码编译成dll文件的方法,在.net环境下,可以用IronPython这个工具,它可以把python代码编译成dll。
‘贰’ python 调用DLL的问题
那就是有内存泄露。内存没有释放。原因可能是多种。一种是你的DLL或者是AntiVC出了错。另外一种是ctypes出错。其中返回的内容没有释放内存。也许只有10个字节,但是长期积累还是很可观。
如果解决这个问题,就是稳定的程序,怎么用都不会坏。
还有一个保守的办法。如果你调用DLL的频率不是特别快。比如每秒不超过2000次。那么你可以将这个功能封装在一个服务进程里。线程再通过接口去访问。该 服务进程即使内存溢出崩溃了。也会自动重新启动。这样你的20个线程基本上只需要重试几次,等服务进程重新启动完成后,就可以获得结果。基本不影响使用。操作系统也很安全。因为进程退出后,所有的遗留错误都会清空。
‘叁’ python调用外部C#库的dll文件
importclr
importSystem
clr.AddReferenceToFile("SimpleHash.dll")
fromCommonimport*
classHashPy(SimpleHash):
def__init__(self):
pass
defHashCalc(self,arg1,arg2):
#strtobyte[]
arg1=System.Text.Encoding.Default.GetBytes(arg1)
arg2=System.Text.Encoding.Default.GetBytes(arg2)
returnSimpleHash.HashCalc(self,arg1,arg2)
audiobuff='
12345678
12345678
'
key='12345678'
printHashPy().HashCalc(audiobuff,key)
python ctype只能调用c/c++. 你要调用c#的dll 要用IronPython。如上面的例子