本日のブログで紹介しているCTTIPクラスのテストプログラム(ToolTip.exe-注)が、(ToolTipProc.hで)最初にしている処理は、例のTOOLINFOW構造体のUnicodeのサイズ問題の際にコモンコントロールのDLL(cmmctrl32.dll)のバージョンにより不具合が出ているのでは、ということで確認のために入れていました。ご参考までに紹介します。

注:BCCForm_and_BCCSkelton→ECCSkelton→ECCSkeltonSample→"11 ToolTip"参照)

 

    //コモンコントロールのDLL(cmmctrl32.dll)のバージョン確認(ECCSkelton版-ANSI版は緑字を修正してください
    DWORD dwVersion = 0;
①  HINSTANCE dll = LoadLibraryW(L"comctl32.dll");
    if(dll) {
②      DLLGETVERSIONPROC GetVersion = (DLLGETVERSIONPROC)GetProcAddress(dll,"DllGetVersion");
        if(GetVersion){
            DLLVERSIONINFO dvi;
            HRESULT hr;
③          memset(&dvi, 0, sizeof(dvi));

            dvi.cbSize = sizeof(dvi);
④          hr = GetVersion(&dvi);
            if(SUCCEEDED(hr)) {
                WCHAR str[512];
                wsprintfW(str, L"Version:%d.%d.%d.%d", dvi.dwMajorVersion, dvi.dwMinorVersion, dvi.dwBuildNumber);
                MessageBoxW(m_hWnd, str, L"Version of comctl32.dll", MB_OK | MB_ICONERROR);
            }
        }

      FreeLibrary(dll);
    }

"comctl32.dll"をロードし、そのインスタンスをdllに読み込みます。

②正常に読み込めたら、"comctl32.dll"の関数(または変数)名である"DllGetVersion"のアドレス(GetVersion)を求めます。

③DLLVERSIONINFOのdviをゼロで初期化します。(ZeroMemory(&dvi, sizeof(dvi));と同じ。)

④"DllGetVersion"関数を、dviのアドレスを引数に呼びます。

ロードした"comctl32.dll"を開放します。

 

因みに私のWin10、Win11マシンはいずれも、

 

Version = 5.82.10586MajorVersion, MinorVersion, BuildNumber

 

でした。なお、今回アップしたソース(ToolTipProc.h)では、間違って(as is usual with me!)".%d"が一つ余計でした。修正版は次のアップデートで載せますので、それまでは最後の".xxxxx"は無視してください。