これは、Windows7でPython 2.7:
lib = ctypes.cdll.LoadLibrary('prov_means')
provmeans = lib.provmeans
ライブラリprov_means.DLLは私の作業ディレクトリにあります。依存関係のない単純なスタンドアロンC関数provmeans()をエクスポートします。
Windowsで同じことを試してみるとXP and Python 2.7
Traceback (most recent call last):
File "D:\python\Auxil\src\auxil.py", line 130, in <module>
lib = ctypes.cdll.LoadLibrary('prov_means')
File "C:\Python27\lib\ctypes\__init__.py", line 431, in LoadLibrary
return self._dlltype(name)
File "C:\Python27\lib\ctypes\__init__.py", line 353, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
DLLをWindows\System32にコピーし、フルパス名も入力してみました
"d:\\python\\auxil\\src\\prov_means"
「.DLL」拡張子の有無にかかわらず。何も機能しません。
エラー126は、依存DLLが見つからない場合に発生するものです。これには、2つの明らかな原因があります。
オプション1が問題であるかどうかは疑わしいですが、いずれにせよ、確かにそのDLL)へのフルパスを使用していると思います。
そのため、オプション2が残ります。その最も一般的な原因は、ターゲットマシンにC++ランタイムがインストールされていないことです。ターゲットマシンにC++ランタイムをインストールするか、静的リンクを使用します /MT
、DLLをビルドするとき、ランタイムを再配布する必要がないようにします。
おそらく、DLLを開発したマシンに、C++コンパイラがインストールされており、ランタイムがインストールされています。コードが失敗するターゲットマシンでは、コンパイラがインストールされていないため、ランタイムが存在しません。
ライブラリの構築にどのコンパイラを使用しましたか?必要なライブラリが不足している可能性がありますか? Dependency Walker(http://www.dependencywalker.com/)を使用して、ライブラリにどのような依存関係があるかを確認できますか?