2013-12-15 69 views
1

這個問題幾乎是這樣說的。 我有一個.net EXE運行,然後加載我的庫(在C++中)。有什麼辦法可以獲得ICLRMetaHost或類似的界面,以便啓動.net exe時mscoree加載? 我想這樣做主要是爲了調試目的,我可以從我的本機庫訪問gc和內存相關的設置。有沒有什麼辦法從C++庫獲取ICLRMetaHost

用於指出使用單聲道主機api的類似實現的獎勵點。

+0

你沒有得到來自託管API「GC和內存有關的設置」鼓搗。這裏沒有足夠的東西來猜測你是在做什麼。關於它的書籍已經寫了,史蒂文Pratschner的是相當不錯的。 –

+0

IGCHost :: GetThreadStats或ICLRGCManager :: GetStats看起來像是有用的函數。 我想訪問CLR正在使用多少內存,所以我能夠顯示調試輸出爲我的應用程序的每個部分使用多少內存。 能夠獲得集合的數量也不錯,這兩個功能都是由我前面提到的兩個函數提供的。 – Programmdude

+1

.NET PerformanceCounters也會返回這個信息。使用非常簡單,不需要定製託管。如果你沒有考慮或記錄你真的需要什麼,那麼定製託管只是一個錘子,看起來可以擊中任何釘子。 –

回答

1

我不明白爲什麼獲得ICLRMetaHost的正常方式將不會從一個已經加載由CLR DLL中工作...

  1. 調用LoadLibrary上mscoree.dll中
  2. 查找地址的CLRCreateInstance
  3. 致電CLRCreateInstance如圖所示here 得到ICLRMetaHost
  4. 調用EnumerateLoadedRuntimes並希望只有一個加載...
  5. 從您列舉的運行時信息獲得ICLRRuntimeHost
  6. ICLRRuntimeHost獲得ICLRControl
  7. ICLRControl獲得ICLRGCManager
+0

#include ? – 2015-11-21 16:09:47

相關問題