J'essaie d'importer une DLL dans Python 2.7.12 64 bits en utilisant ctypes. Pour affiner la portée des erreurs, j'ai utilisé l'exemple DLL MathLibrary de Microsoft et construit mon propre basé sur ces instructions (https://msdn.microsoft.com/en-GB/library/ms235636.aspx). Je l'ai construit en tant que version x64 et j'ai copié la DLL résultante dans C: \ root pour éliminer les problèmes de longueur de chemin ou d'erreur d'orthographe. Ma machine nous exécute Windows 7 Pro 64 bits.DLL appelant Python: TypeError: L'objet 'LibraryLoader' n'est pas appelable
Mon code python est:
from ctypes import cdll, windll, c_long, c_int, create_string_buffer
test_dll = windll("C:\\MathLibrary.dll")
add = test_dll.add
Lorsqu'il est exécuté, il indique ce qui suit:
Traceback (most recent call last):
File "C:\temp.py", line 3, in <module>
test_dll = windll("C:\\MathLibrary.dll")
TypeError: 'LibraryLoader' object is not callable
Quelqu'un peut-il conseiller ce qui pourrait être le problème?
Merci
Andy
Mise à jour:
@eryksun commentaire - éliminaient l'erreur LibraryLoader. Cependant, je me bats maintenant pour accéder à la fonction d'ajout et obtenir cette erreur:
add = test_dll.add
File "C:\Python27\lib\ctypes\__init__.py", line 375, in __getattr__
func = self.__getitem__(name)
File "C:\Python27\lib\ctypes\__init__.py", line 380, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'add' not found
En général, il est préférable d'utiliser 'ctypes.WinDLL (" C: \\ MathLibrary.dll ")'. Ou si la bibliothèque utilise 'SetLastError', utilisez' ctypes.WinDLL ("C: \\ MathLibrary.dll", use_last_error = True) '. Si vous insistez pour utiliser 'windll' pour charger la DLL, utilisez' windll.LoadLibrary ("C: \\ MathLibrary.dll") '- une méthode qui appelle' WinDLL' mais ne permet pas de passer des paramètres au constructeur - - ou soit 'windll [" C: \\ MathLibrary.dll "]' ou 'getattr (windll," C: \\ MathLibrary.dll ")', les deux mettent en cache la DLL chargée. – eryksun