python鎬庝箞鐢熸垚dll鏂囦欢
鍦≒ython涓敓鎴怐LL鏂囦欢鐨勬渶甯哥敤鏂规硶鏄娇鐢–ython鎴栬€卌types搴撱€備笅闈㈠垎鍒粙缁嶈繖涓ょ鏂规硶鐨勪娇鐢ㄦ楠わ細
- 浣跨敤Cython鐢熸垚DLL鏂囦欢锛?/li>
- 棣栧厛锛屽畨瑁匔ython搴擄細鍦ㄥ懡浠よ涓繍琛?code>pip install cython銆?/li>
- 鍒涘缓涓€涓悕涓?code>example.pyx鐨凜ython婧愭枃浠讹紝鍏朵腑鍖呭惈浣犺鐢熸垚涓篋LL鐨勪唬鐮併€備緥濡傦細
def add(a, b):
return a + b
- 鍒涘缓涓€涓悕涓?code>setup.py鐨凱ython鑴氭湰锛岀敤浜庢瀯寤篋LL鏂囦欢銆備緥濡傦細
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("example.pyx"),
)
- 鍦ㄥ懡浠よ涓繍琛?code>python setup.py build_ext --inplace锛岃鍛戒护灏嗙敓鎴愪竴涓悕涓?code>example.pyd鐨凞LL鏂囦欢銆?/li>
- 浣跨敤ctypes鐢熸垚DLL鏂囦欢锛?/li>
- 棣栧厛锛岀紪鍐欎竴涓寘鍚綘瑕佺敓鎴愪负DLL鐨勪唬鐮佺殑C婧愭枃浠躲€備緥濡傦紝鍒涘缓涓€涓悕涓?code>example.c鏂囦欢锛屽叾涓寘鍚互涓嬩唬鐮侊細
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
- 浣跨敤C缂栬瘧鍣ㄥ皢C婧愭枃浠剁紪璇戜负DLL銆備緥濡傦紝鍦ㄥ懡浠よ涓繍琛?code>gcc -shared -o example.dll example.c锛岃鍛戒护灏嗙敓鎴愪竴涓悕涓?code>example.dll鐨凞LL鏂囦欢銆?/li>
- 鍦≒ython涓娇鐢╟types搴撳姞杞紻LL鏂囦欢骞惰皟鐢ㄥ叾涓殑鍑芥暟銆備緥濡傦細
import ctypes
example = ctypes.CDLL('./example.dll')
result = example.add(2, 3)
print(result) # 杈撳嚭锛?
鏃犺浣犻€夋嫨浣跨敤Cython杩樻槸ctypes锛屼笂杩版楠ら兘鍙互甯姪浣犵敓鎴愪竴涓彲鐢ㄧ殑DLL鏂囦欢銆?/p>
相关问答