使用 GetFunctionInfo 从 FunctionID 获取函数的名称
Using GetFunctionInfo to get the name of a function from a FunctionID
我正在使用ICorProfilerInfo
接口编写CLR探查器。
使用 SetEnterLeaveFunctionHooks
时,回调方法会传递一个FunctionID
。
如何获取给定此FunctionID
函数的元数据(我特别在名称之后(?
MSDN 的一篇文章建议,第一个调用应该是 GetFunctionInfo
。此函数的文档指出:
探查器代码可以调用 ICorProfilerInfo::GetModuleMetaData 来获取给定模块的元数据接口。然后,返回到 pToken 引用的位置的元数据令牌可用于访问函数的元数据。
它没有详细说明最后一句话("元数据令牌......可用于访问函数的元数据'(。这是如何工作的?
到目前为止,我正在执行以下操作:
void MyProfiler::EnterMethod(FunctionID functionID)
{
ClassID classId = 0;
ModuleID moduleId = 0;
mdToken metaDataToken = 0;
IMetaDataImport* metaDataImport = NULL;
// (m_info is ICorProfilerInfo3)
m_info->GetFunctionInfo(functionID, &classId, &moduleId, &metaDataToken);
m_info->GetModuleMetaData(moduleId, ofRead, IID_IMetaDataImport, (IUnknown**)&metaDataImport);
// What goes here?
}
我试图这样称呼GetTypeRefProps
:
mdToken ptkResolutionScope;
WCHAR szName[1024];
ULONG cchName = 1024;
ULONG pchName;
HRESULT result = MetaDataImport->GetTypeRefProps(pToken, &ptkResolutionScope, szName, cchName, &pchName);
最后一个调用返回 S_FALSE
,并且不填充szName
。
GetTypeRefProps
仅适用于您的令牌是 TypeRef 令牌,GetFunctionInfo
会为您提供一个 MethodDef 令牌,该令牌要求您使用 GetMethodProps
方法。
metaDataImport->GetMethodProps(metaDataToken, NULL, szName, cchName, &pchName, NULL, NULL, NULL, NULL, NULL);
相关文章:
- constexpr 函数获取常量字符*
- 在 C++ 中将函数获取和设置为虚拟函数
- 函数获取参数的变量列表并将它们转换为一系列字节?
- 如何在C++中从Lua函数获取返回表?
- C++使用第二个函数获取字符数组的长度
- 在编译时通过 constexpr 或模板函数获取多维 std::array 的大小
- 包装 C API 通过C++接受迭代器的函数获取原始指针
- 如何指定创建文件函数获取未缓存的结果?
- 从函数获取 char* 后的条件 gdb 断点
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- RCPP:将布尔值传递在列表中从R到C 函数的错误,该函数获取RCPP ::列表
- 从 Rcpp c++ 函数获取 r 函数参数
- 如何从子例程函数获取到 main 函数的返回值
- 使用 getline 函数获取分段错误
- 如何使用getForegroundWindow函数获取模块
- C++,无法使用 .size() 函数获取有效的矢量大小
- 如何从调用的函数获取返回值,该函数在 TBB 中的另一个线程中执行
- 如何使用C或C++函数获取特定文件夹中的文件数
- 如何在 c++ 中从函数获取返回值而不为其变量赋值
- 如何使用strlen函数获取字符串的长度