如何加载资源中指定语言种类的字符串。
如何加载资源中指定语言种类的字符串。
字符串资源在可执行文件中是以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直接可以支持加载指定语言的字符串资源。 。
答:沙石 食物 钢铁 木材 魔石四种 要是楼主要修狼的话,建议主修食物 要是当纯羊的话,修铁或者魔晶石吧 要是当武装羊,还是修魔晶较好。。。那个炮台啊。。巨汗。详情>>