web-dev-qa-db-ja.com

PythonでC#dllをロードする方法は?

pythonでC#DLLをロードするにはどうすればよいですか?

C#ファイルに追加のコードを追加する必要がありますか? (c ++ファイルでのエクスポートと同様)

IronPythonを使用したくありません。モジュールをPythonにインポートしたい!

22
aF.

これは、質問の2番目の部分に答えるためのものですDLL COMを表示してみてください。

を使用して

[ComVisible(true)]

わかりましたIronPythonは、Python言語の.net実装です。テクノロジーは、到着時に.net 4.0のDLRを使用するため、IronPythonにはより多くのダイナミズムがあります(つまり、Wordです)。英語でPython達人なら、IronPythonを使用すると、よりくつろげるでしょう)

したがって、IronPythonを選択することもできます。そうする場合は、COM表示部分をスキップできます。両方(C#、Iron Python)は.Netの下にあるので

http://ironpython.net/

サンプルはこちらをご覧くださいC#DLL COMに表示されます

5
Vivek Bernard

パッケージ Python for.NET とPython実装 IronPython は同じように動作します。

C#の例DLL MyDll.dll

import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()

詳細は this post を参照してください。

22
Vincent

Python for .NET は、IronPythonを使用しない場合に適しています。

5
Warren

Python .NETまたはIronPython)のようなソリューションを使用したくない場合は、C++/CLIラッパーを実装し、それをロードするためにPython ctypesを使用することができます。次に例を示します。

C++/CLIライブラリCallCSharp:

extern "C" {
    __declspec(dllexport) void foo()
    {
        // here you could use managed and unmanaged code
        Console.WriteLine("Hello, C# world...");
    }

Pythonスクリプト:

from ctypes import cdll
lib = cdll.LoadLibrary("./CallCSharp.dll")
lib.foo()

私はこのブログを読むことを強くお勧めします: http://pragmateek.com/if-your-plumbing-doesnt-work-youre-just-not-using-enough-pipes/#more-1745

また、C++/CLIラッパーが別のアセンブリにあるコードを呼び出すときに発生する問題も処理します(WindowsErrorのようなものが表示されます:[Error -532462766] Windows Error 0xE0434352 from your Pythonスクリプト)。

2
anhoppe