LoadString with nBufferMax equal 0
LoadString with nBufferMax equal 0
我正在努力使我的应用程序国际化。在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);
相关文章:
- 如何使用"equal to"以外的评估编写开关语句
- C++有"not equal compare and exchange"或"fetch add on not equal"吗?
- 为什么 std::equal 模板由两个类参数化?
- C++20概念中的"equal"概念
- 使用'equal to'符号初始化期间的内存
- equal()是否默认包含在全局命名空间中
- 在 C 族中,在一个循环中,为什么"less than or equal to"比"less than"符号更受欢迎?
- std::具有用户定义类的equal函数
- 我怎样才能写得"if not greater than or equal to some value"雄辩?
- (false - NOT (0)) is equal to 1?
- 是 'char* p=0;std::equal(p,p,p)' 根据C++标准明确定义
- 为什么C++ STL 容器使用 "less than" 运算符<而不是 "equal equal" 运算符== 作为比较器?
- 在“abcd”和“abc”的情况下,“std::equal”是否取消引用“end()”
- 操作员过载"equal to"
- 如何实现一个虚拟函数equal()
- c++:实现equal方法-如何确保给定的对象与此对象不是同一个引用
- LoadString with nBufferMax equal 0
- 比较双精度堆栈导致Always Equal
- Boost::mpl::equal对于vector和vector_c总是为false
- 确定两个数字是否"almost equal"并输出结果