C調用pythondll
❶ 怎樣用python調用dll
可以的,python中一般有兩種方法調用DLL中的函數。1.直接使用函數名,函數名可以用dependencywalker等工具查看。(這個工具在vc或者vs的工具包中)[python]viewplainimportctypesdll=CTYPES.CDLL("test.dll")res=test(3,4)2.使用Ordinal,Ordinal可以用dependencywalker等工具查看。[python]viewplainimportctypesdll=CTYPES.CDLL("test.dll")res=dll[1](3,4)
❷ 我現在想把自己寫的python模塊源代碼封裝成dll,然後在別的python腳本里調用,可以嗎
可以的,只要把python模塊轉換成dll模塊,利用Python自帶的ctypes模塊載入調用就行。
ctypes 是Python的外部函數庫。它提供了與 c語言兼容的數據類型,並允許調用 DLL 或共享庫中的函數。可使用該模塊以純 Python 形式對這些庫進行封裝。
ctypes導出了cdll對象,在 Windows 系統中還導出了windll和oledll對象用於載入動態鏈接庫。通過操作這些對象的屬性,你可以載入外部的動態鏈接庫。cdll載入按標準的cdecl調用協議導出的函數,而windll導入的庫按stdcall調用協議調用其中的函數。
(2)C調用pythondll擴展閱讀:
載入調用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怎麼調用c#的dll
1、首選運行工具 makepy.py。
❹ C程序用Python做插件該怎麼實現
Python 是一種用於快速開發軟體的編程語言,它的語法比較簡單,易於掌握,但存在執行速度慢的問題,並且在處理某些問題時存在不足,如對計算機硬體系統的訪問,對媒體文件的訪問等。而作為軟體開發的傳統編程語言 C 語言,卻能在這些問題上很好地彌補 Python 語言的不足。因此,本文通過實例研究如何在 Python 程序中整合既有的 C 語言模塊,包括用 C 語言編寫的源程序和動態鏈接庫等,從而充分發揮 Python 語言和 C 語言各自的優勢。
概覽
背景知識介紹
Python 語言的特點
Python 作為一門程序開發語言,被越來越多地運用到快速程序開發。Python 是一種解釋型的,互動的,面向對象的編程語言,它包含了模塊化的操作,異常處理,動態資料形態,以及類型的使用。它的語法表達優美易讀,具有很多優秀的腳本語言的特點:解釋的,面向對象的,內建的高級數據結構,支持模塊和包,支持多種平台,可擴展。而且它還支持互動式方式運行,圖形方式運行。它擁有眾多的編程界面支持各種操作系統平台以及眾多的各類函數庫,利用 C 和 C++ 可以對它進行擴充。
C 語言的特點
C 語言作為最受人們歡迎的語言之一,有廣泛的發展基礎。簡潔緊湊、靈活方便,功能強大是其特點。另外,C 語言是一門中級語言。它把高級語言的基本結構和語句與低級語言的實用性結合起來。由於可以直接訪問物理地址,可以方便的對硬體進行操作。因此,很多的系統軟體都是由 C 語言編寫。
Python 語言與 C 語言的交互
為了節省軟體開發成本,軟體開發人員希望能夠縮短的軟體的開發時間,希望能夠在短時間內開發出穩定的產品。Python 功能強大,簡單易用,能夠快速開發應用軟體。但是由於 Python 自身執行速度的局限性,對性能要求比較高的模塊需要使用效率更高的程序語言進行開發,例如 C 語言,系統的其他模塊運用 Python 進行快速開發,最後將 C 語言開發的模塊與 Python 開發的模塊進行整合。在此背景下,基於 Python 語言與 C 語言的各自特點,用 C 語言來擴展現有的 Python 程序,顯得很有意義。本文首先介紹幾種常用的整合 Python 程序與 C 語言程序的方法,最後給出相應的實例。
利用 ctypes 模塊整合 Python 程序和 C 程序
ctypes 模塊
ctypes 是 Python 的一個標准模塊,它包含在 Python2.3 及以上的版本里。ctypes 是一個 Python 的高級外部函數介面,它使得 Python 程序可以調用 C 語言編譯的靜態鏈接庫和動態鏈接庫。運用 ctypes 模塊,能夠在 Python 源程序中創建,訪問和操作簡單的或復雜的 C 語言數據類型。最為重要的是 ctypes 模塊能夠在多個平台上工作,包括 Windows,Windows CE,Mac OS X,Linux,Solaris,FreeBSD,OpenBSD。
接下來通過幾個簡單的例子來看一下 ctypes 模塊如何整合 Python 程序和 C 程序。
源代碼層面上的整合
利用 Python 本身提供的 ctypes 模塊可以使 Python 語言和 C 語言在源代碼層面上進行整合。本節介紹了如何通過使用 ctypes 庫,在 Python 程序中可以定義類似 C 語言的變數。
下表列出了 ctypes 變數類型,C 語言變數類型和 Python 語言變數類型之間的關系:
表 1. ctypes,c 語言和 Python 語言變數類型關系
❺ python嵌套C語言、調用外部C的dll,python實參如何傳遞並修改
handle = ctypes.c_int(0)
ret = lib.XF_OpenDev(0, ctypes.byref(handle))
handle作為指針傳進去後如果被改掉,返回的是一個c_int 或者c_long, 你可以通過handle.value來獲得可以在python中靈活運用的真正的python整形
❻ python調用c語言動態庫dll/.so中的函數的參數是結構體的問題
java源自C++,C++源自C語言....
各有優點呀,不知道要怎麼回答了,或許樓主是搞C語言的吧,這些語言都各有特點呀...
首先應該清晰,Java是由C++發展而來的,他保留了c++的大部分內容,類似於c++,
但句法更清晰,規模更小,更易學。他是在對多種程式設計語言進行了深入細致研究的
基礎上,據棄了其他語言的不足之處,從根本上解決了c++的固有缺陷,而產生的一種
新的完全方面向對象的語言。
Java和c++的相似之處多於不同之處,但兩種語言問幾處主要的不同使得Java更容易
學習,並且編程環境更為簡單。
因篇幅所限,這里不能完全列出不同之處,僅列出比較顯著的差別:
1.指針
Java無指針,並且增添了自動的內存管理功能,從而有效地防
止了c/c++語言中指針操作失誤,如指針懸空所造成的系統崩潰。
比w操作返回一對象的引用,類似於c++中的引用;在c++中,
new返回一個對象的指針。在Java中無指針,不會遇見下面這樣的
語句:
Mywork?>Mywork();
沒有指針的程式無法訪問不屬於他的內存,消除了在c++
中?些常見的錯誤,這有利於Java程式的安全。
2.多重繼承
c++支持多重繼承,這是c++的一個特徵,他允許多父類派
生一個類。盡管多重繼承功能非常強,但使用復雜,而且會引起許多麻
煩,編譯程式實現他也非常不容易。Java不支持多重繼承,但允許一個
類繼承多個介面(界面),實現了c++多重繼承的功能,又避免了c++的
許多缺陷。
❼ 如何為C程序創建可被python調用的dll
C寫的dll應該都能被python調用,python有一個mole叫ctypes是專門干這個的。
❽ 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。如上面的例子
❾ Windows下如何在python中調用c語言程序編譯的dll
這個dll可能是用borland公司的編譯器編譯出來的。 或者這個dll可能不是在你本機上編譯的,如果你有這個dll的源碼,可以編譯一下,然後放到腳本同一目錄下,再試試。