ctypesを使用してDLLをPython 2.7.12 64ビットにインポートしようとしています。エラーの範囲を絞り込むために、私はMicrosoftのMathLibrary DLLの例を使用し、これらの命令(https://msdn.microsoft.com/en-GB/library/ms235636.aspx)に基づいて自分自身を構築しました。私はそれをx64リリースとして構築し、結果のdllをC:\ rootにコピーして、パスの長さやスペルの問題を解消しました。私のマシンは、Windows 7 Pro 64 Bitを実行しています。Python呼び出しDLL:TypeError: 'LibraryLoader'オブジェクトが呼び出せません
私のPythonのコードは次のとおりです。実行すると
from ctypes import cdll, windll, c_long, c_int, create_string_buffer
test_dll = windll("C:\\MathLibrary.dll")
add = test_dll.add
それは次のように報告されます
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
、誰もが問題になる可能性がありますどのようなアドバイスをすることはできますか?
おかげ
アンディ
更新:
@eryksunコメント - これはLibraryLoaderエラーを取り除きます。しかし、私は現在、add関数にアクセスしてこのエラーに遭遇しています:
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
一般に、 'ctypes.WinDLL(" C:\\ MathLibrary.dll ")'を使う方が良いです。ライブラリが 'SetLastError'を使用している場合は、' ctypes.WinDLL( "C:\\ MathLibrary.dll"、use_last_error = True) 'を使用します。 'windll'を使用してDLLをロードすることを強くお勧めする場合、' windll.LoadLibrary( "C:\\ MathLibrary.dll") ' - WinDLLを呼び出してもコンストラクタに渡すパラメータを許可しないメソッド - または 'windll [" C:\\ MathLibrary.dll "]'または 'getattr(windll、" C:\\ MathLibrary.dll ")'のいずれかで、ロードされたDLLをキャッシュします。 – eryksun