更新:2007 年 11 月
通知探查器函数即将返回到调用方,并提供有关堆栈帧和函数返回值的信息。
void FunctionLeave2 (
        [in]  FunctionID                        funcId,
        [in]  UINT_PTR                          clientData,
        [in]  COR_PRF_FRAME_INFO                func,
        [in]  COR_PRF_FUNCTION_ARGUMENT_RANGE  *retvalRange
);
参数
- funcId 
 [in] 正在返回的函数的标识符。
- clientData 
 [in] 探查器以前通过 FunctionIDMapper 函数指定的重新映射的函数标识符。
- func 
 [in] 一个 COR_PRF_FRAME_INFO 值,该值指向有关堆栈帧的信息。- 探查器应将此值视为可回传到 ICorProfilerInfo2::GetFunctionInfo2 方法中的执行引擎的不透明句柄。 
- retvalRange 
 [in] 一个指向 COR_PRF_FUNCTION_ARGUMENT_RANGE 结构的指针,该结构指定函数的返回值的内存位置。- 为了访问返回值信息,必须设置 COR_PRF_ENABLE_FUNCTION_RETVAL 标志。探查器可以使用 ICorProfilerInfo::SetEventMask 方法设置事件标志。 
备注
FunctionLeave2 函数返回后,func 和 retvalRange 参数的值将无效,因为这些值可能会发生更改或已损坏。
FunctionLeave2 函数是回调;您必须实现该函数。该实现必须使用 __declspec(naked) 存储类属性。
执行引擎在调用此函数之前未保存任何寄存器。
- 在进入时,您必须保存您使用的所有寄存器,包括浮点单元 (FPU) 中的那些寄存器。 
- 在退出时,您必须通过弹出由堆栈调用方入栈的所有参数来还原堆栈。 
FunctionLeave2 的实现不应进行阻止,因为它将延迟垃圾回收。实现不应尝试垃圾回收,因为堆栈可能未处于适合进行垃圾回收的状态。如果尝试进行垃圾回收,运行库将会进行阻止,直至 FunctionLeave2 返回。
同时,FunctionLeave2 函数不能调入托管代码或以任何方式导致托管内存分配。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**CorProf.idl
**库:**CorGuids.lib
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0
请参见
参考
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 方法