LoadString with nBufferMax equal 0

LoadString with nBufferMax equal 0

本文关键字:equal nBufferMax with LoadString      更新时间:2023-10-16

我正在努力使我的应用程序国际化。在msdn上挖掘了两天之后,我做了一个测试,它加载了包含资源的特定语言库。这也是我第一次尝试加载库作为资源,从它加载字符串等。

接下来,根据msdn的例子http://msdn.microsoft.com/en-us/library/windows/desktop/dd319071%28v=VS.85%29.aspx,我正在尝试LoadString.

由于整个应用程序的字符串加载等于大量的文本复制,我认为我会使用-我认为是- LoadString的内存效率特性,这是设置nBufferMax参数为零。根据LoadString文档,它应该返回一个指向字符串资源的指针。我想我会做一个结构体或一类字符串指针,并沿着这些行做一些事情(我只提取了重要的位):

wchar_t textBuf[SOMEVALUE]; // <-- this is how id DOES work
wchar_t *myString; // <-- this is how i would like it
HMODULE resContainer=LoadLibraryEx(L"MUILibENU.dll",NULL, LOAD_LIBRARY_AS_DATAFILE);
if(0!=resContainer){
  // this works OK
  int copied=LoadStringW(resContainer,IDS_APP_TITLE,textBuf,SOMEVALUE); 
  // this fails, also gives a warning at compile time about uninitialized variable used.
  int copied=LoadStringW(resContainer,IDS_APP_TITLE,myString,0);
}

正如你所看到的,我试图让myString成为一个指针加载资源库的字符串,而不实际复制任何东西。我的问题是:我是否误解了msdn文档?我可以或我可以不得到一个指针的字符串直接在加载库,并简单地使用它以后,例如,显示一个消息框,而不实际复制任何东西?直到我卸载该库?

MSDN显示:

[…如果该参数为0,则lpBuffer接收到一个指向资源本身的只读指针。

表示a)指针的类型必须是const wchar_t*:

const wchar_t *myString;

和b)必须将指针传递给指针,并使用难看的强制类型转换:

int copied=LoadStringW(resContainer,IDS_APP_TITLE,(LPWSTR)&myString,0);