Revision: 9127 https://osdn.net/projects/ttssh2/scm/svn/commits/9127 Author: zmatsuo Date: 2021-01-16 14:20:46 +0900 (Sat, 16 Jan 2021) Log Message: ----------- imagehlp.dll の遅延ロード指定がなくても動作するようにした - Windows95 には imagehlp.dll の SymGetLineFromAddr() が存在しない Modified Paths: -------------- trunk/teraterm/teraterm/ttdebug.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/ttdebug.cpp =================================================================== --- trunk/teraterm/teraterm/ttdebug.cpp 2021-01-16 05:20:30 UTC (rev 9126) +++ trunk/teraterm/teraterm/ttdebug.cpp 2021-01-16 05:20:46 UTC (rev 9127) @@ -121,16 +121,22 @@ char msg[3072], buf[256]; HMODULE h, h2; char imagehlp_dll[MAX_PATH]; + BOOL (WINAPI *pSymGetLineFromAddr)(HANDLE hProcess, DWORD dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE Line); // Windows98/Me/NT4\x82ł͓\xAE\x82\xA9\x82Ȃ\xA2\x82\xBD\x82߃X\x83L\x83b\x83v\x82\xB7\x82\xE9\x81B(2007.10.9 yutaka) GetSystemDirectory(imagehlp_dll, sizeof(imagehlp_dll)); strncat_s(imagehlp_dll, sizeof(imagehlp_dll), "\\imagehlp.dll", _TRUNCATE); h2 = LoadLibrary(imagehlp_dll); - if (((h = GetModuleHandle(imagehlp_dll)) == NULL) || - (GetProcAddress(h, "SymGetLineFromAddr") == NULL)) { - FreeLibrary(h2); - goto error; + h = GetModuleHandle(imagehlp_dll); + if (h == NULL) { + FreeLibrary(h2); + goto error; } + *(void **)&pSymGetLineFromAddr = (void *)GetProcAddress(h, "SymGetLineFromAddr"); + if (pSymGetLineFromAddr == NULL) { + FreeLibrary(h2); + goto error; + } FreeLibrary(h2); /* \x83V\x83\x93\x83{\x83\x8B\x8F\xEE\x95\xF1\x8Ai\x94[\x97p\x83o\x83b\x83t\x83@\x82̏\x89\x8A\xFA\x89\xBB */ @@ -235,7 +241,7 @@ // \x83t\x83@\x83C\x83\x8B\x96\xBC\x82ƍs\x94ԍ\x86\x82̎擾 ZeroMemory( &(ih_line), sizeof(ih_line) ); ih_line.SizeOfStruct = sizeof(ih_line); - bResult = SymGetLineFromAddr( hProcess, sf.AddrPC.Offset, &Disp, &ih_line ); + bResult = pSymGetLineFromAddr( hProcess, sf.AddrPC.Offset, &Disp, &ih_line ); if (bResult) { _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s:%lu", ih_line.FileName, ih_line.LineNumber );