[Ttssh2-commit] [9127] imagehlp.dll の遅延ロード指定がなくても動作するようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 1月 16日 (土) 14:20:46 JST


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 );


Ttssh2-commit メーリングリストの案内
Back to archive index