当前位置:  开发笔记 > 编程语言 > 正文

在C#中使用Python对象

如何解决《在C#中使用Python对象》经验,为你挑选了3个好方法。

有没有一种从C#调用Python对象的简单方法,即没有任何COM混乱?



1> Daniel Earwi..:

是的,托管IronPython.



2> JaredPar..:

在当前发布的C#版本中,如果不使用某种桥接层,就没有很好的方法可以实现这一点.您可以在某种程度上托管IronPython,但很难利用IronPython的动态功能,因为C#是一种非常静态类型的语言

如果你说的是IronPython,C#4.0将能够无缝地与之交互.C#4.0引入了一个新的calldh动态特性,它允许它与DLR上运行的任何语言一起使用.

dynamic d = GetSomePythonObject();
d.SomeMethod();



3> RossFabrican..:

我知道3种方式:

1)使用Iron Python,您的Python项目可以与使用C#编写的项目自由交互.

2)将您的Python函数公开给COM.如果你需要使用你不想或不能转换为Iron Python的Python库,那么你会这样做(EG,如果你只有一个DLL.)"COM混乱"并不是真的那么糟糕,如果你的Python代码和C#代码在同一台机器上运行.本教程中的代码表明它并不过分丑陋:

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的代码而你需要远程访问它,你会这样做.这需要最多的工作,因为你需要编组和解组参数并从字节或字符串返回值,但这是我的一个团队在需要与远程Python进程进行C#对话时所做的事情.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有