本日のブログで紹介している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.10586(MajorVersion, MinorVersion, BuildNumber)
でした。なお、今回アップしたソース(ToolTipProc.h)では、間違って(as is usual with me!)".%d"が一つ余計でした。修正版は次のアップデートで載せますので、それまでは最後の".xxxxx"は無視してください。