如何加载资源中指定语言种类的字符串。
如何加载资源中指定语言种类的字符串。
字符串资源在可执行文件中是以RT_STRING资源来存储的。其中每16个连续(string id连续)的字符串存为一个RT_STRING资源。在内存中表示为16个变长结构体。 struct rt_string_block { unsigned short cch; wchar_t str [0]; }; 下面这段代码可以加载指定语言的字符串。
返值为0时,表示失败;大于零,结果为字符串的长度(以宽字符记)。如果你需要ANSI字符串,请使用WideCharToMultiByte来进行转换。 int myLoadString ( IN HINSTANCE inst, // resource instance handle IN UINT id, // string id IN LANGID lang_id, // language id OUT wchar_t *psz, // wide char string buffer IN len) // buffer length in wide char { assert (psz != NULL); assert (len > 0); if (psz == NULL ¦ ¦ len <= 0) { SetLastError (ERROR_INVALID_PARAMETER); rturn 0; }; wchar_t *pwch; wchar_t *ptr; UINT idRsrc = id / 16 + 1; int strIdx = id % 16; HRSRC hrsc = NULL; hrsc = FindResourceEx (inst, RT_STRING, MAKEINTRESOURCE (idRsrc), lang_id); if (hrsc == NULL) return 0; ptr = (wchar_t *)LoadResource (inst, hrsc); if (ptr == NULL) return 0; pwch = ptr; for (int i=0;i<16;++i) { if (*pwch != 0) { int cch = *pwch; if (i == strIdx) { if (cch == 0) { SetLastError (ERROR_RESOURCE_DATA_NOT_FOUND); return 0; }; len = min (len-1, cch); wcsncpy (psz, pwch, len); psz [len] = '\0'; return 0; }; }; }; SetLastError (ERROR_RESOURCE_DATA_NOT_FOUND); return 0; }; 如果你使用的vc7。
1,那么ATL/MFC中的CString直接可以支持加载指定语言的字符串资源。 。
答:你是不是把文件名打错了。。。是msvcp71.dll这个把,这个文件属于vc7的运行库,有时候病毒什么的或者其它原因都会出问题,那么很多根据vc7编译的软件在那...详情>>
答:桌面图标是无法自动得到,因为图标的存在与否应用程序无法知道。 如果你确认在桌面上可能会有这个图标,那么你只要遍历桌面所有的图标,然后把指向该应用程序的图标都更改...详情>>