Visual c++ 如何从驻留的COM对象获取HMODULE?

Visual c++ 如何从驻留的COM对象获取HMODULE?,visual-c++,com,webbrowser-control,Visual C++,Com,Webbrowser Control,我想确定实现Microsoft Web浏览器控件的DLL的版本。我需要的方法是通过DllGetVersion函数从实现的DLL中查询DLLVERSIONINFO;因为我认为这是最稳定的方式。但是,我不知道如何从Microsoft Web浏览器控件对象中获取已实现DLL的HMODULE 如何获取已实现DLL的HMODULE?还是有其他方法来确定其版本的稳定性 感谢您的帮助。您可以从注册表中读取Internet Explorer COM对象的服务器(通常,在较新的版本中,它将由或ieframe.dl

我想确定实现Microsoft Web浏览器控件的DLL的版本。我需要的方法是通过
DllGetVersion
函数从实现的DLL中查询
DLLVERSIONINFO
;因为我认为这是最稳定的方式。但是,我不知道如何从Microsoft Web浏览器控件
对象中获取已实现DLL的
HMODULE

如何获取已实现DLL的
HMODULE
?还是有其他方法来确定其版本的稳定性


感谢您的帮助。

您可以从注册表中读取Internet Explorer COM对象的服务器(通常,在较新的版本中,它将由或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);
}

这在新的IE中工作吗?我听说较新版本的Microsoft Web浏览器控件已不在shdocvw.dll中。这是可能的。我已将答案更新为读取InternetExplorer COM对象的服务器路径。在最近的版本中,它确实是由ieframe.dll提供的