2009-05-10 5 views

答えて

1

このpostをご覧ください。

8

はい、IronPythonをホストします。

6

現在リリースされているC#のバージョンでは、何らかの種類のブリッジ層を使用せずにこれを実現する素晴らしい方法はありません。 IronPythonをある程度までホストすることはできますが、IronPythonの動的機能を活用するのは難しいでしょう.C#は静的な型指定言語なので、

IronPythonと言えば、C#4.0はそれと相互作用することができます一見、 C#4.0では、DLR上で実行されているすべての言語で動作する新しい機能calldh dynamicが導入されています。

dynamic d = GetSomePythonObject(); 
d.SomeMethod(); 
5
私は3つの方法を知っている

1)を使用する鉄のPython、およびあなたのPythonのプロジェクトは、C#で書かれたプロジェクトと自由に対話することができます。

2)Python関数をCOMに公開します。 Iron Pythonに変換したくない、または変換できないPythonライブラリを使用する必要がある場合は、これを行うでしょう。 "COM mess"はそれほど悪くはありませんPythonコードとC#コードが同じマシン上で実行されています。 this tutorialからこのコードは、それが過度に醜いではないことを示している:

class PythonUtilities: 
    _public_methods_ = [ 'SplitString' ] 
    _reg_progid_ = "PythonDemos.Utilities" 
    # NEVER copy the following ID 
    # Use "print pythoncom.CreateGuid()" to make a new one. 
    _reg_clsid_ = "{41E24E95-D45A-11D2-852C-204C4F4F5020}" 

    def SplitString(self, val, item=None): 
    import string 
    if item != None: item = str(item) 
    return string.split(str(val), item) 

# Add code so that when this script is run by 
# Python.exe, it self-registers. 
if __name__=='__main__': 
    print "Registering COM server..." 
    import win32com.server.register 
    win32com.server.register.UseCommandLine(PythonUtilities) 

3)はC#とPythonは、ソケットを介して通信持っ。 Iron Pythonに変換できないコードがあり、それをリモートからアクセスする必要がある場合は、これを行います。 これは、引数や値をバイトや文字列から整列化してアンマーシャリングする必要があるため、ほとんどの作業を必要としますが、C#でリモートのPythonプロセスと話をする必要があるときは、

関連する問題