"Nikolay Sivov" <[EMAIL PROTECTED]> wrote: > +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, > + LPVOID lpvReserved) > +{ > + TRACE("%p, %d, %p\n", hinstDLL, fdwReason, lpvReserved); > + > + switch (fdwReason) > + { > + case DLL_PROCESS_ATTACH: > + oleacc_handle = hinstDLL; > + break; > + } > + return TRUE; > +}
Why don't you call DisableThreadLibraryCalls() if you don't use the thread callouts? > +UINT WINAPI GetRoleTextW(DWORD role, LPWSTR lpRole, UINT rolemax) > +{ > + HGLOBAL hmem; > + HRSRC hrsrc; > + unsigned int id; > + const WCHAR *p; > + INT ret; > + > + TRACE("%u %p %u\n", role, lpRole, rolemax); > + > + hrsrc = FindResourceW(oleacc_handle, MAKEINTRESOURCEW((LOWORD(role) >> > 4) + 1), > + (LPWSTR)RT_STRING); > + if (!hrsrc) return 0; > + hmem = LoadResource(oleacc_handle, hrsrc); > + if (!hmem) return 0; > + > + p = LockResource(hmem); > + id = role & 0x000f; > + while (id--) p += *p + 1; > + > + /* return role text length */ > + if(!lpRole) > + return *p; > + > + ret = LoadStringW(oleacc_handle, role, lpRole, rolemax); > + if(!(ret > 0)) > + return 0; > + > + return ret; > +} Why not just use LoadStringW directly? > +UINT WINAPI GetRoleTextA(DWORD role, LPSTR lpRole, UINT rolemax) > +{ > + INT ret; > + > + TRACE("%u %p %u\n", role, lpRole, rolemax); > + > + /* get length (without trailing NULL) */ > + ret = GetRoleTextW(role, NULL, rolemax); > + > + if(!lpRole) > + return ret; GetRoleTextW above should be called only for the !lpRole case. And better to actually call GetRoleTextA. > + return LoadStringA(oleacc_handle, role, lpRole, min(rolemax, ret + 1)); Why not just use rolemax in the LoadStringA call? Introducing the IDS_ROLE_SYSTEM_xxx identifiers is completely redundant, use the ROLE_SYSTEM_xxx values directly instead. -- Dmitry.