通用情況下,沒有什麼好辦法能把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出現在許可權入口裡面,沒有就編輯添加一個,賦予他許可權,應用即可