zoukankan      html  css  js  c++  java
  • Python for .net脚本调用dotnet框架(ref和out参数问题)

    PythonNet是一个和IronPython想法差不多,但绝不一样。PythonNet可以让你写脚本来调用.Net Framework ,或者是你自己写的dll。是在sourceforge上的一个开源项目。用法的话就是先下载一个Python的 解释器,安装完后,用下载下来的Python.Net里相应版本的文件替换掉原先的。下载地址 http://pythonnet.sourceforge.net/ ,支持到dotnet 2.0.

    比如,下载了Python 2.5安装到C盘,路径是 C:\Python25 ,把D:\pythonnet-2.0-alpha2\python2.5-UCS2目录中的所有文件复制到C:\Python25 ,现在就可以使用了。

    试试代码

    import System

    class Test():
    _id
    = 0
    _name
    = "123"
    def __init__(self,id,name):
    self._id
    = id
    self._name
    = name

    def main():
    app
    = Test(123,"asd")
    System.Console.WriteLine(app._id)
    System.Console.WriteLine(app._name)
    System.Console.ReadKey()

    if __name__ == '__main__':
    main()

    这就是一个控制台程序了,当然,也可以做Winform的。但是,我觉得直接用Python作的话好像没什么好处,但是用作调用还是很不错的。

    但是C#里有ref传值和out传值,怎么办呢?在Python里都是传引用的,但是在这里似乎不行啊。

    import System as s
    def main():
    m
    = "123"
    r
    = 0
    x
    = s.Int32.TryParse(m,r)
    s.Console.WriteLine(r)
    s.Console.ReadKey()
    if __name__ == '__main__':
    main()
    
    
    
    
    上面的代码输出值是0,这就明显不对。但是输出x是个乱码,看它的类型,是个数组。
    import System as s
    def main():
    m
    = "123"
    r
    = 0
    x
    = s.Int32.TryParse(m,r)
    s.Console.WriteLine(x[0])
    s.Console.WriteLine(x[
    1])
    s.Console.ReadKey()
    if __name__ == '__main__':
    main()
    
    
    改造了下代码果然可以了。输出了
    1
    123
    第一个1,应该是True的数值表示,而123就是转换后的值了。
    而对于ref传值,也是一样的。
    import SharpBot.Engin as Engin
    import HopeUtil.HTML as html
    import System as s
    def main():
    app
    = Engin.DefaultCrawler("http://www.163.com");
    result
    = html.HTMLSimpleDOM.HTMLSimpleModel()
    suc
    = app.ResponseString(result)
    if suc[0]:
    s.Console.WriteLine(suc[
    1].Title)
    s.Console.WriteLine(suc[
    1].MetaCharset)
    s.Console.WriteLine(suc[
    1].Body)
    else:
    s.Console.WriteLine(
    123)

    if __name__ == '__main__':
    main()
    
    
    上面的ResponseString在C#里参数是(ref HTMLSimpleDOM.HTMLSimpleModel result)。这里也返回到了数组中了。用脚本来测试写的爬虫引擎,感觉还不错。用脚本操作dotnet感觉就是不一样。
  • 相关阅读:
    ArrayList用法
    MessageBox
    将文本文件导入Sql数据库
    在桌面和菜单中添加快捷方式
    泡沫排序
    Making use of localized variables in javascript.
    Remove double empty lines in Visual Studio 2012
    Using Operations Manager Connectors
    Clear SharePoint Designer cache
    Programmatically set navigation settings in SharePoint 2013
  • 原文地址:https://www.cnblogs.com/birdshover/p/1316151.html
Copyright © 2011-2022 走看看