C++ StringCbPrintf示例不工作

C++ StringCbPrintf示例不工作,c++,api,buffer,tchar,C++,Api,Buffer,Tchar,在构建示例时使用多字节字符集,我们得到最后一行的“初始值设定项不是常量”错误。VS10 SP1,没有CLR #define arraysize 30 TCHAR pszDest[arraysize]; size_t cbDest = arraysize * sizeof(TCHAR); LPCTSTR pszFormat = TEXT("%s %d + %d = %d."); TCHAR* pszTxt = TE

在构建示例时使用多字节字符集,我们得到最后一行的“初始值设定项不是常量”错误。VS10 SP1,没有CLR

        #define arraysize 30
        TCHAR pszDest[arraysize]; 
        size_t cbDest = arraysize * sizeof(TCHAR);

        LPCTSTR pszFormat = TEXT("%s %d + %d = %d.");
        TCHAR* pszTxt = TEXT("The answer is");

        HRESULT hr = StringCbPrintf(pszDest, cbDest, pszFormat, pszTxt, 1, 2, 3);

        // The resultant string at pszDest is "The answer is 1 + 2 = 3."
其他CLR选项失败。是否要删除错误?

基于C的代码(即Hans的注释)可以在VS Win32项目中运行。模块范围的声明包括:

#include <windows.h>
#include "stdafx.h"
#include <Strsafe.h> 
#include <stdio.h>
#include "msgbox.h"
int hr = 0;
#define arraysize 30
wchar_t hrtext[128];
HWND hWnd;
基于C的代码(即Hans的注释)可以在VS Win32项目中运行。模块范围的声明包括:

#include <windows.h>
#include "stdafx.h"
#include <Strsafe.h> 
#include <stdio.h>
#include "msgbox.h"
int hr = 0;
#define arraysize 30
wchar_t hrtext[128];
HWND hWnd;

您使用的代码段用C++标记,而不是C。从.c到.cPHANS重命名源代码文件,我深感荣幸。啊,是的,习惯了微软“无声淘汰”C。这里必须小心。该项目是基于Forger的优秀解决方案和vcproj(错误地不是vcxproj)文件的。我的答案是基于在VS中创建Win32项目,它不是“逐步淘汰”,VS2013和UpTealC99语法。您使用的代码片段用C++标记,而不是C。从.C到.CPPHANS重命名源代码文件,我深感荣幸。啊,是的,习惯了微软“无声淘汰”C。这里必须小心。该项目是基于Forger的优秀解决方案和vcproj(错误地不是vcxproj)文件的。我的答案是基于在VS中创建WIN32项目。它不是“逐步淘汰”,VS2013和以上版本支持C99语法。