㈠ python有没有办法能够编译成DLL文件
通用情况下,没有什么好办法能把python编译成dll,因为python是解释型语言,dll是编译后的二进制文件,2者不在一个次元。除非你把python的解释器也打包进你的工程,并在你的exe里调用。
但某些特殊情况下,也有把python的代码编译成dll文件的方法,在.net环境下,可以用IronPython这个工具,它可以把python代码编译成dll。
㈡ python调用dll中的函数时报错
似乎代码里没有看到你没有加载DLL啊。
另外你在c里直接改写python的内存可能不太妥当。通常是在C里构造后,再返回到python里去。
从你的程序上看,调用完Thin后,你的变量p似乎变成了空指针。
ctypes调用DLL通常都是别人做好的DLL,没有办法才自己去调用。这里有好多麻烦事情。
如果是自己写代码,通常会建议你用cython这个模块。很容易就实现接口。你也不用担心这些变量类型与接口封装的问题。
另外我印象中dll似乎与编译器也有关系。用VC可能容易些。用BC,或者是GCC就麻烦些。
另外还有版本的问题,64位与32位不能通用。
原则上讲,你这种用法,也不是不可以,可能还是哪个地方没有弄对。比如编译参数。你可以试试用return type把数据带回来。而不是用指针写内存。
因为p目前按理它是常量,很有可能调用机制中,不会让你改写它。
㈢ Python调用dll文件返回错误无法解决,,,大神帮忙啊!
Error 126是未找到相应模块,在目录C:/Python27/Lib/ctypes下面有Sum.dll文件吗?
㈣ python 能用来写动态链接库(dll文件)吗
python可以调到动态连接库,但不能编写编译出动态链接库,底层的东西,还是用c++写吧
㈤ Python运行导出DLL函数.问题,怎么解决
通常是在C里构造后,再返回到python里去。
从你的程序上看,调用完Thin后,你的变量p似乎变成了空指针。
ctypes调用DLL通常都是别人做好的DLL,没有办法才自己去调用。这里有好多麻烦事情。
如果是自己写代码,通常会建议你用cython这个模块。很容易就实现接口。你也不用担心这些变量类型与接口封装的问题。
另外我印象中dll似乎与编译器也有关系。用VC可能容易些。用BC,或者是GCC就麻烦些。
另外还有版本的问题,64位与32位不能通用。
原则上讲,你这种用法,也不是不可以,可能还是哪个地方没有弄对。比如编译参数。你可以试试用return type把数据带回来。而不是用指针写内存。
因为p目前按理它是常量,很有可能调用机制中,不会让你改写它。
㈥ python程序怎么编译成dll
python 本身是解释型的语言,如果要把python打包成dll就必需得把python的解释器也打包进去,个人觉得这样做是没有意义的。
静态dll,没有这样的说法,dll的全称是动态链接库
dll加载方式分为静态加载与动态加载,静态加载并不是指将dll打包到exe,而是指在exe一运行就将dll一并载入到内存
㈦ 我现在想把自己写的python模块源代码封装成dll,然后在别的python脚本里调用,可以吗
可以的,只要把python模块转换成dll模块,利用Python自带的ctypes模块加载调用就行。
ctypes 是Python的外部函数库。它提供了与 C语言兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。
ctypes导出了cdll对象,在 Windows 系统中还导出了windll和oledll对象用于载入动态链接库。通过操作这些对象的属性,你可以载入外部的动态链接库。cdll载入按标准的cdecl调用协议导出的函数,而windll导入的库按stdcall调用协议调用其中的函数。

(7)python不能写dll扩展阅读:
加载调用DLL的相关方法:
1、加载DLL
加载的时候要根据你将要调用的函数是符合什么调用约定的。
stdcall调用约定:两种加载方式
Objdll = ctypes.windll.LoadLibrary("dllpath")
Objdll = ctypes.WinDLL("dllpath")
cdecl调用约定:也有两种加载方式
Objdll = ctypes.cdll.LoadLibrary("dllpath")
Objdll = ctypes.CDLL("dllpath")
其实windll和cdll分别是WinDLL类和CDll类的对象。
2、调用dll中的方法
加载dll的时候会返回一个DLL对象(假设名字叫Objdll),利用该对象就可以调用dll中的方法。 e.g.如果dll中有个方法名字叫Add(注意如果经过stdcall声明的方法,如果不是用def文件声明的导出函数或者extern “C” 声明的话,编译器会对函数名进行修改,这个要注意。)
调用:nRet = Objdll.Add(12, 15) 即完成一次调用。
㈧ Python 无法安装,提示 dll 的错误。机子是 window8, 64 位系统
提示There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor.
查系统Log得知是拿不到C:\Users\x\AppData\Local\Temp权限[2]。实际上是everyone用户拿不到temp权限。尝试改C:\Users\x\AppData\Local\Temp的everyone用户权限,提示 “无法枚举容器内对象,访问被拒绝。”
解决方法
在待操作的文件夹,右键,属性,安全标签,高级
弹出窗口显示当前文件夹的所有者,选择修改,弹出选择用户或用户组窗口。
在文本框中输入当前用户名(当前用户应该是管理器才行)
在所有者下面出现了一个复选框,替换子容器和对象的所有者,应用
在最下面的使用可从此对象继承的权限项目替换所有子对象的权限项目,应用。(不能直接勾两个复选框,应用,得分两步)
确保everyone出现在权限入口里面,没有就编辑添加一个,赋予他权限,应用即可