2013-12-15 1 views
1

꽤 많은 질문 상태. .net exe가 실행되고 내 라이브러리 (C++)가로드됩니다. .net exe를 시작할 때 mscoree가로드하는 ICLRMetaHost 또는 이와 유사한 인터페이스를 얻을 수있는 방법이 있습니까? 디버깅을 위해 기본 라이브러리에서 gc 및 메모리 관련 설정에 액세스 할 수 있도록이 작업을 주로하고 싶습니다.C 라이브러리에서 ICLRMetaHost를 얻을 수있는 방법이 있습니까

보너스 포인트는 모노 호스팅 API를 사용하는 유사한 구현을 가리 킵니다.

+0

당신은 호스팅 API에서 "GC와 메모리 관련 설정"으로 수리를하지 않는 얻을 얻을 수 있습니다. 당신이 실제로하려고하는 것을 추측하기에 충분하지 않습니다. 책은 그것에 대해 쓰여졌습니다. 스티븐 프라츠 너는 꽤 좋습니다. –

+0

IGCHost :: GetThreadStats 또는 ICLRGCManager :: GetStats는 유용 할 것으로 보입니다. CLR이 사용하는 메모리에 액세스하려고하므로 응용 프로그램의 각 부분에서 사용중인 메모리 양에 대한 디버그 출력을 표시 할 수 있습니다. 컬렉션 수를 얻을 수 있다는 것도 좋은 일입니다.이 기능은 앞서 언급 한 두 가지 기능에 의해 제공됩니다. – Programmdude

+1

.NET PerformanceCounters도이 정보를 반환합니다. 사용이 매우 간편하고 맞춤 호스팅이 필요하지 않습니다. 당신이 * 정말로 * 필요로하는 것을 생각하거나 문서화하지 않는다면, 사용자 정의 호스팅은 겉으로보기에 손톱을 치는 망치 일뿐입니다. –

답변

1

ICLRMetaHost를 구하는 일반적인 방법은 CLR에 의해로드 된 것 DLL을 내에서 작동하지 않을 이유가 표시되지 않습니다 ...

  • 주소를 찾기 mscoree.dll이
    1. 을 LoadLibrary CLRCreateInstance
    2. 으로 전화하십시오. here 으로 잡고 ICLRMetaHost을 얻으십시오.
    3. EnumerateLoadedRuntimes을 호출하고 하나만로드하면 ...
    4. 에서 열거 된 런타임 정보는 ICLRRuntimeHost입니다.
    5. ICLRRuntimeHost에서 ICLRControl에서 ICLRControl
    6. ICLRGCManager
    +0

    #include ? –