--- np2/win9x/win32sub.cpp 2007/01/10 14:43:36 1.2 +++ np2/win9x/win32sub.cpp 2007/10/26 14:38:34 1.4 @@ -19,7 +19,7 @@ void __msgbox(const char *title, const c // WinAPIだと Win95でバグあるの -int loadstring2(HINSTANCE hInstance, UINT uID, +int loadstringresource(HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax) { HMODULE hModule; @@ -40,7 +40,7 @@ int loadstring2(HINSTANCE hInstance, UIN if (hGlobal == NULL) { return(0); } - pRes = (UINT16 *)LockResource(hRsrc); + pRes = (UINT16 *)LockResource(hGlobal); dwPos = 0; uID = uID & 15; while((uID) && (dwPos < dwResSize)) { @@ -74,7 +74,7 @@ int loadstring2(HINSTANCE hInstance, UIN lpBuffer = NULL; nBufferMax = 0; } - nLength = WideCharToMultiByte(CP_ACP, 0, pRes + dwPos, nLength, + nLength = WideCharToMultiByte(CP_ACP, 0, (WCHAR *)(pRes + dwPos), nLength, lpBuffer, nBufferMax, NULL, NULL); if (lpBuffer) { lpBuffer[nLength] = '\0'; @@ -83,3 +83,37 @@ int loadstring2(HINSTANCE hInstance, UIN return(nLength); } +// WinAPIだと Win95でバグあるの +TCHAR *lockstringresource(HINSTANCE hInstance, LPCTSTR pszString) { + + TCHAR *pszRet; + int nSize; + + pszRet = NULL; + if (HIWORD(pszString)) { + nSize = (lstrlen(pszString) + 1) * sizeof(TCHAR); + pszRet = (TCHAR *)_MALLOC(nSize, ""); + if (pszRet) { + CopyMemory(pszRet, pszString, nSize); + } + } + else if (LOWORD(pszString)) { + nSize = loadstringresource(hInstance, (UINT)pszString, NULL, 0); + if (nSize) { + pszRet = (TCHAR *)_MALLOC((nSize + 1) * sizeof(TCHAR), ""); + if (pszRet) { + loadstringresource(hInstance, (UINT)pszString, + pszRet, nSize + 1); + } + } + } + return(pszRet); +} + +void unlockstringresource(TCHAR *pszString) { + + if (pszString) { + _MFREE(pszString); + } +} +