【问题标题】:Is there any way to get ICLRMetaHost from c++ library有没有办法从 c++ 库中获取 ICLRMetaHost
【发布时间】:2014-01-02 17:50:05
【问题描述】:

问题说明的差不多。 我有一个运行的 .net exe,然后加载我的库(在 c++ 中)。有什么方法可以让 mscoree 在启动 .net exe 时加载 ICLRMetaHost 或类似接口? 我想这样做主要是为了可以从我的本机库中访问 gc 和内存相关设置以进行调试。

使用单主机 api 指出类似实现的奖励积分。

【问题讨论】:

  • 您不会从托管 api 修改“gc 和内存相关设置”。这里不足以猜测您真正想要做什么。相关书籍已经写过,Steven Pratschner 的很不错。
  • IGCHost::GetThreadStats 或 ICLRGCManager::GetStats 似乎是有用的函数。我想访问 CLR 正在使用多少内存,因此我能够显示我的应用程序的每个部分正在使用多少内存的调试输出。能够获取集合的数量也很好,这两个功能都是由我前面提到的两个函数提供的。
  • .NET PerformanceCounters 也返回此信息。使用非常简单,无需自定义托管。如果您没有考虑或记录您真正需要什么,那么自定义托管只是一把锤子,似乎可以击中任何钉子。
  • 正是我想要的。我不知道这门课。

标签: c# c++ clr-hosting


【解决方案1】:

我不明白为什么从 CLR 加载的 DLL 中获取 ICLRMetaHost 的正常方式不起作用...

  1. mscoree.dll 上的加载库
  2. 找到CLRCreateInstance的地址。
  3. 拨打CLRCreateInstance 如图here 获取ICLRMetaHost
  4. 致电EnumerateLoadedRuntimes,希望只加载一个...
  5. 从您枚举的运行时信息中获取ICLRRuntimeHost
  6. ICLRRuntimeHost获得ICLRControl
  7. ICLRControl获得ICLRGCManager

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2020-04-09
    • 2012-08-13
    • 2018-09-25
    • 2021-11-18
    • 2020-02-29
    • 2013-10-09
    相关资源
    最近更新 更多