我们(错误地)使用 StringCbPrintfW 编写了一个数据库查询,该查询在任何使用逗号作为小数分隔符的语言环境中都失败了。修复很容易,对吧? StringCbPrintf_lW 需要一个语言环境,也在 strsafe.h 中定义。两者的定义如下:
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
所以只需创建语言环境并将 StringCbPrintfW 替换为 StringCbPrintf_lW。
Intellisense 很高兴,GoToDefinition 很高兴,而 ClCompile 则不然。我不断得到
任何想法有什么问题?
最佳答案
头文件 Strsafe.h 定义了有问题的方法,使用两个定义来过滤这个函数,如下所示:
#if defined(STRSAFE_LOCALE_FUNCTIONS) && !defined(STRSAFE_NO_CB_FUNCTIONS)
/*++
STDAPI
StringCbPrintf_l(
_Out_writes_bytes_(cbDest) _Always_(_Post_z_) LPTSTR pszDest,
_In_ size_t cbDest,
_In_ _Printf_format_string_params_(2) LPCTSTR pszFormat,
_In_ locale_t locale,
...
);
Routine Description:
This routine is a version of StringCbPrintf that also takes a locale.
Please see notes for StringCbPrintf above.
--*/
#ifdef UNICODE
#pragma region Application Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#define StringCbPrintf_l StringCbPrintf_lW
// ...
简而言之,您需要在包含标题之前定义
STRSAFE_LOCALE_FUNCTIONS
。如:#define STRSAFE_LOCALE_FUNCTIONS
#ifdef STRSAFE_NO_CB_FUNCTIONS
#pragma message("NO CB FUNCTIONS")
#endif
#include <strsafe.h>
关于c++ - 找不到 StrSafe 函数 (StringCbPrintf_lW) 的区域设置版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37440682/