爱问知识人 爱问教育 医院库

如何加载资源中指定语言种类的字符串。

首页

如何加载资源中指定语言种类的字符串。

如何加载资源中指定语言种类的字符串。

提交回答
好评回答
  • 2004-10-07 18:58:51
      字符串资源在可执行文件中是以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直接可以支持加载指定语言的字符串资源。 。

    1***

    2004-10-07 18:58:51

类似问题

换一换
  • VC++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):