LoadString 不会返回只读指针

问题描述 投票:0回答:1

我在最近的一个项目中遇到了 LoadString 的奇怪行为。由于某种原因,如果我尝试加载一个将

cchBufferMax
设置为零的字符串来获取只读指针,LoadString 将返回一个
-1
,这似乎不属于记录的行为范围。如果我传入一个非零大小的缓冲区,则字符串会正确加载。

以下内容将返回

-1
并且
lpAppName
保持不变:

LPCSTR lpAppName;
LoadString(hInstance, IDS_APPNAME, reinterpret_cast<LPSTR>(&lpAppName), 0);

但是,以下内容按预期工作:

char cAppName[64];
LoadString(hInstance, IDS_APPNAME, cAppName, sizeof(cAppName));

在这两种情况下,

IDS_APPNAME
是相同的(
#define
200
中的
resource.h
)。

有什么想法吗?

windows winapi
1个回答
0
投票

所有字符串资源本身都是 Unicode。但是您显然没有针对 Unicode 编译应用程序(通过使用

LPCSTR
可以明显看出),因此
LoadString()
映射到
LoadStringA()
,它可以将 Unicode 字符串复制到 ANSI 缓冲区中(如第二个示例中所示)但无法返回指向 Unicode 数据的直接 ANSI 指针。这是 MSDN 文档中关于
LoadStringA()
的错误。

要执行您正在尝试的操作,您需要使用

LoadStringW()
来代替:

LPCWSTR lpAppName = nullptr;
LoadStringW(hInstance, IDS_APPNAME, reinterpret_cast<LPWSTR>(&lpAppName), 0);
© www.soinside.com 2019 - 2024. All rights reserved.