|
|
|
|
|
|
|
谈 WinDbg 之 InternalCall 的使用与实现1 |
|
|
|
在使用 Reflector.NET 或者 Rotor 源码查看 BCL 库的实现时,经常会碰到一些被标记为 InternalCall 的方法。如 System.String 中用于获取字符串长度的 Length 属性,实现上就是调用被标记为 InternalCall 的 String.InternalLength 方法: 以下内容为程序代码: 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 运行机制和页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] 第1页、共9页 |
|
|
|
|
设为首页 | 加入收藏 | 广告服务 | 友情链接 | 版权申明
Copyriht 2007 - 2008 © 科普之友 All right reserved |