Tôi có một mô-đun Python, wrapper.py
, kết thúc tốt đẹp một DLL C. DLL nằm trong cùng thư mục với module. Do đó, tôi sử dụng mã sau để tải mã:Python ctypes: tải DLL từ một đường dẫn tương đối
myDll = ctypes.CDLL("MyCDLL.dll")
Điều này hoạt động nếu tôi thực hiện wrapper.py
từ thư mục riêng của nó. Nếu, tuy nhiên, tôi chạy nó từ nơi khác, nó không thành công. Đó là bởi vì ctypes tính toán đường dẫn tương đối so với thư mục làm việc hiện tại.
Câu hỏi của tôi là, có cách nào để tôi có thể chỉ định đường dẫn của DLL liên quan đến trình bao bọc thay vì thư mục làm việc hiện tại không? Điều đó sẽ cho phép tôi gửi cả hai lại với nhau và cho phép người dùng chạy/nhập trình bao bọc từ bất kỳ đâu.
Tôi sử dụng cách tiếp cận trong [câu trả lời đã chọn] (http://stackoverflow.com/a/2980501/1020470) nhưng trong một trường hợp tôi có dll đã nhập một xuất từ một dll khác và nó sẽ không tải . Giải pháp là nạp các dll khác trước, EG: '_DIRNAME = os.path.dirname (__ file__); required_dll = ctypes.cdll.LoadLibrary (os.path.join (_DIRNAME, required.dll)); main_dll = ctypes.cdll.LoadLibrary (os.path.join (_DIRNAME, main.dll)) 'voila hoạt động! –