当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 原文:http://www.blogcn.com/User8/flier_lu/index.html?id=3270482 在使用Reflector.NET或者Rotor源码查看BCL库的实现时,经常会碰到一些被标记为InternalCall的方法。
 

 

    摘要:原文:http://www.blogcn.com/user8/flier_lu/index.html?id=3409568 几个月前我曾大致分析过 c# 2.0 中 iterator block 机制的实现原理,《c# 2.0 中iterators的改进与实现原理浅析》,文中简要介绍了 c# 2.0 是如何在不修改 clr 的前提下由编译器,通过有限状态机来实现 iterator block ......
    摘要:更新blogger.com的个人资料的时候偶然发现兴趣或者电影都是链接,点击之后blogger.com会去搜索有和自己相同关键字的人,这点挺好的,很好的资源。 url这样的:http://www.blogger.com/profile-find.g?t=i&q=soccer 然后我把soccer改成其他的关键字,就可以方便的搜索,没必要自己写上去的那些爱好了。 ......


用WinDbg探索CLR世界 [8] InternalCall 的使用与实现

原文:http://www.blogcn.com/user8/flier_lu/index.html?id=3270482

    在使用 reflector.net 或者 rotor 源码查看 bcl 库的实现时,经常会碰到一些被标记为 internalcall 的方法.如 system.string 中用于获取字符串长度的 length 属性,实现上就是调用被标记为 internalcall 的 string.internallength 方法: 【程序编程相关:中英文字符混合处理方法

【推荐阅读:asp.net窗体的打开和关闭

以下内容为程序代码: 【扩展信息:在 ASP.NET 中执行 URL 重写

namespace system

{

  [serializable]

  public sealed class string : ...

  {

    [methodimpl(methodimploptions.internalcall)]

    private int internallength();

    public int length

    {

      get

      {

        return this.internallength();

      }

    }

  }

}

    这些方法因为执行效率.安全性或者为了实现简单等不同原因,通过 il 代码以外的 native code 形式提供实现代码.但与通过 dllimport 定义的 interoper 方法不同的是,他们无需被定义为 static extern 方法,也无需通过单独的 dll 导出函数被实现.它们作为 clr 的诸多内部调用方式之一,被封装在一个看似密不透风的盒子里面,通过一个 internalcall 的函数定义,将函数最终使用者与函数功能提供者隔离开来.

    但实际使用中为了分析 clr 运行机制与调试,我们经常性需要了解与分析这类函数.下面将从 clr 内部使用与实现 internalcall 函数的不同角度,对其做一个粗略的分析.

    作为一个 bcl 函数,被定义成 internalcall 的函数使用上与普通 il 函数没有任何区别.
...   下一页
 ·项目总结(1)--集中处理上下文     »显示摘要«
    摘要:我们一般在接收传递过来的整数参数的时候,通常可以这样做int questionid = convert.toint32(request["questionid"]) 或者int questionid = convert.toint32(httpcontext.current.request["questionid"])传递字符也大致相识,通常参数都会比较多,......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE