2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonnetを使って.NETのDLLをpythonから呼ぶときの注意点とエラー対処方法

Posted at

pythonnet - Python.NETとは

Pythonから.NET向けのDLLを呼び出すことができるライブラリです.
MITライセンスとなっており,だれでも無償で使うことができます.
https://github.com/pythonnet/pythonnet

使い方

使い方はこちらの記事が大変参考になりました.
Pythonから.NETを呼び出す方法とついでにその逆も

ここでは簡単に紹介します.

インストール方法

pip install pythonnet

使用例

test.pyと同じディレクトリにあるABCLIb.dllを使いたい場合.
別のディレクトリにある場合は適宜パスを追加してください.clr.AddReference('./DEF/ABCLib')など.

test.py
import clr

clr.AddReference('ABCLib')
from ABCTools import ABCLib

abc = ABCLib()

clrはCommon Language Runtimeの略のようです.

注意点とエラーが起きたとき対処方法

私がpythonnetを使用したときにつまづいたポイントとその対象方法を紹介します.

.dllを書かない

エラー:System.IO.FileNotFoundException: Unable to find assembly 'ABCLib.dll'.
clr.AddReferenceするときに拡張子'.dll'を書いているとこのエラーが発生します。
'.dll'を消してみましょう。

# エラーが発生する例
clr.AddReference('ABCLib.dll')

# エラーが発生しない例
clr.AddReference('ABCLib')

セキュリティを許可する

エラー:System.IO.FileNotFoundException: Unable to find assembly 'ABCLib'.
外部から取得してきたdllの場合、ファイルへのアクセスがブロックされていることがあります。
アクセスを許可する設定をしてみてください。
dllファイルで右クリック→プロパティ→全般→最下段の「許可する」にチェック→OK

image.png

DLLとPythonで64bit/32bitを合わせる

エラー:System.IO.FileNotFoundException: ファイルまたはアセンブリ 'ABCLib, Version=~~~~~~~~, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

DLLとPythonのbitが合っていないと読み取ることができませんでした。

  • Pythonのbitの調べ方
import sys
print(sys.version)
出力
3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?