2013-06-13 3 views
1

Microsoft Web Browser Control을 구현 한 DLL의 버전을 확인하고 싶습니다. 내가 갈 필요가있는 방법은 쿼리 DLLVERSIONINFO에서 구현 된 DLL을 통해 DllGetVersion 함수를 호출하는 것입니다. 왜냐하면 그것이 가장 안정된 방법이라고 생각하기 때문입니다. 그러나 Microsoft Web Browser Control 개체에서 구현 된 DLL을 HMODULE받는 방법을 알지 못합니다.COM 객체에서 HMODULE을 가져 오는 방법은 무엇입니까?

HMODULE 구현 된 DLL을 어떻게 얻을 수 있습니까? 아니면 안정성을 가진 버전을 결정하는 다른 방법이 있습니까?

미리 감사드립니다.

답변

2
당신은 레지스트리 Internet Explorer에서 COM 개체의 서버를 읽기 (ususally, 그것은 shdocvw.dll에 의해 호스팅됩니다 또는 최신 버전에서 ieframe.dll), 및 수동으로 이런 일을로드 할 수

:

TCHAR key[MAX_PATH]; 
// read CLSID_InternetExplorer COM Server path 
SHRegGetPath(HKEY_CLASSES_ROOT, _T("CLSID\\{8856F961-340A-11D0-A96B-00C04FD705A2}\\InProcServer32"), NULL, key, 0); 
HINSTANCE hInstance = LoadLibrary(PathFindFileName(key)); 
if (hInstance) 
{ 
    DLLGETVERSIONPROC fn = (DLLGETVERSIONPROC)GetProcAddress(hInstance, "DllGetVersion"); 
    if (fn) 
    { 
     DLLVERSIONINFO2 version; 
     ZeroMemory(&version, sizeof(DLLVERSIONINFO2)); 
     version.info1.cbSize = sizeof(DLLVERSIONINFO2); 
     (*fn)((DLLVERSIONINFO*)&version); 

     printf("Major:%u\n", version.ullVersion >> 48); 
     printf("Minor:%u\n", (version.ullVersion >> 32) & 0xFFFF); 
     printf("Build:%u\n", (version.ullVersion >> 16) & 0xFFFF); 
     printf("QFE:%u\n", version.ullVersion & 0xFFFF); 
    } 
    FreeLibrary(hInstance); 
} 
+0

인가 새로운 IE 에서이 작품은? 나는'Microsoft Web Browser Control '의 새로운 버전이'shdocvw.dll' 안에 있지 않다고 들었습니다. – UltimaWeapon

+0

그럴 수도 있습니다. InternetExplorer COM 개체의 서버 경로를 읽으려고 내 대답을 업데이트했습니다. 최근 버전에서는 실제로 ieframe.dll에 의해 제공됩니다. –

관련 문제