加載動態連接庫。 採用load的方式加載python
from ctypes import * handle = cdll.LoadLibrary("./test.dll") print(handle)
可能出現的錯誤code
FileNotFoundError: Could not find module './dest.dll'. Try using the full path with constructor syntax. OSError: [WinError 193] %1 不是有效的 Win32 應用程序。
這兩個都是版本不兼容的緣由。 只須要修改32 | 64
位編譯便可。get
訪問方法。it
cpp
代碼io
#include<stdio.h> extern "C" int test() { printf("hello test\n"); return 0; }
python
代碼編譯
from ctypes import * handle = cdll.LoadLibrary("./test.dll") handle.test()
編譯執行。class
g++ -shared -fPIC -m32 test.cpp -o test.dll
org++ -shared -fPIC -m64 test.cpp -o test.dll
test
python test.py
import
另外一種訪問連接庫方法。module
from ctypes import * handle = cdll.LoadLibrary("./test.dll") getattr(handle,"test")()
由於有可能動態連接庫的方法是一種不符合python
命名規範進行命名的。如1231asfdasdfsa#!QW
。方法名是以數字開頭,並且中間還包含有特殊字符。所以能夠經過attr
的方式進行訪問。
可能會如下標的方式進行訪問。如cdll.kernel32[1]
。