2

私はPythonのグリーンハンドで、Pythonでdllをインポートするときに問題に直面しています。オンラインで見つけたいくつかのヒントを参照して、エラープロンプトで以下のように ctypes を使用してみました。

>>> import ctypes
>>> dl=ctypes.WinDll('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    dl=ctypes.WinDll('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')
AttributeError: 'module' object has no attribute 'WinDll'

>>> dl=ctypes.cdll.LoadLibrary('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    dl=ctypes.cdll.LoadLibrary('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')
  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] 

私は何か間違ったことをしていますか、それともこの dll は Python 標準に準拠してスクリプト化されていませんでしたか? 分析のためにMediaFireにアップロードしました。どんな助けでも大歓迎です!

4

3 に答える 3

1

UdfManagerPython.dllDLLをDependency Walkerにロードしたところ、この DLL が に依存していることが指摘されましたpython22.dll。この DLL を Python (2.7) インタープリターにロードしようとすると、メッセージ ボックスが表示され、多かれ少なかれ同じことがわかりました。

コンピューターに python22.dll が見つからないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

したがって、この DLL は、使用している Python 2.7 ではなく、Python 2.2 で使用することを意図していたようです。

Python 2.2 がインストールされていません。その場合、おそらく別のエラー メッセージが表示されます。

は Python 2.3 以降でのみサポートされているctypesため、Python 2.2 では使用できないことにも注意してください。ctypes

この DLL がどこから来たのかわかりません。その名前を Google で検索したところ、4 つの結果すべてが得られました。そのうちの 1 つがこの質問でした。

ちなみに、DLL自体は見つかったが、DLLの依存関係が見つからない場合、「指定されたモジュールが見つかりません」という形式のエラーを見たことがあります。したがって、このようなメッセージが表示され、DLL 自体が存在することが確実な場合は、その依存関係を確認してください。

編集: Python 2.2 をインストールして、この DLL をロードできるかどうかを確認してみました。Python 2.2 がインストールされていれば、少なくともこの DLL をロードできますが、いずれかのinit...メソッドを呼び出そうとすると Python がクラッシュします。(どのパラメーターを渡せばいいのかわからないので、何も渡さなかった。)

これらのメソッドのいずれかを呼び出そうとしたときに何が起こったのかを次に示します。

Python 2.7.3 (デフォルト、2012 年 4 月 10 日 23:31:26) [MSC v.1500 32 ビット (Intel)] on win32
詳細については、「ヘルプ」、「著作権」、「クレジット」、または「ライセンス」と入力してください。
>>> ctypesインポートから *
>>> l = CDLL("UdfManagerPython.dll")
>>> l.initPyUdfNumber()
致命的な Python エラー: インタープリターが初期化されていません (バージョンが一致しませんか?)

このアプリケーションは、異常な方法で終了するようランタイムに要求しました。
詳細については、アプリケーションのサポート チームにお問い合わせください。

このエラー メッセージの最初の行を Google で調べたところ、ほとんどの結果から得た繰り返しのテーマは、このエラーが、あるバージョンの Python にリンクされた拡張モジュールを別のバージョンの Python でロードしようとしていることを示しているということでした。

したがって、コメントの質問への回答では、いいえ、Python 2.7 でこの DLL をロードする方法があるとは思いません。

于 2012-07-05T21:49:53.497 に答える
0

WinDll はすべて小文字にする必要があります。

dl = ctypes.windll('C:\\Python27\\Lib\\site-packages\\UdfManagerPython.dll')
于 2012-07-05T18:39:26.567 に答える
0

WinDLLまたはを試してくださいCDLL

LoadLibraryで直接使用しctypesたことはありませんが、それでも DLL が見つからないようです。システムパス上にあることを確認してください。(または、Python モジュールと同じディレクトリにあります。)

于 2012-07-05T19:09:06.417 に答える