pythonでC#DLLをロードするにはどうすればよいですか?
C#ファイルに追加のコードを追加する必要がありますか? (c ++ファイルでのエクスポートと同様)
IronPythonを使用したくありません。モジュールをPythonにインポートしたい!
これは、質問の2番目の部分に答えるためのものですDLL COMを表示してみてください。
を使用して
[ComVisible(true)]
わかりましたIronPythonは、Python言語の.net実装です。テクノロジーは、到着時に.net 4.0のDLRを使用するため、IronPythonにはより多くのダイナミズムがあります(つまり、Wordです)。英語でPython達人なら、IronPythonを使用すると、よりくつろげるでしょう)
したがって、IronPythonを選択することもできます。そうする場合は、COM表示部分をスキップできます。両方(C#、Iron Python)は.Netの下にあるので
パッケージ Python for.NET とPython実装 IronPython は同じように動作します。
C#の例DLL MyDll.dll
:
import clr
clr.AddReference('MyDll')
from MyNamespace import MyClass
my_instance = MyClass()
詳細は this post を参照してください。
Python for .NET は、IronPythonを使用しない場合に適しています。
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スクリプト)。