Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Win32 C+中使用malloca而不是alloca+;项目 我正在更新一个旧的C++ DLL项目。对于其中一个导出函数,有 BSTR __stdcall j2cs( const long lJulian, int bDMY, BSTR sDelim ) { USES_CONVERSION; int iDay, iMonth; long lYear; char chDate[20]; char chInt[10]; char * cDelim = W2A( sDelim );_C++_Malloc_Bstr_Alloca - Fatal编程技术网

如何在Win32 C+中使用malloca而不是alloca+;项目 我正在更新一个旧的C++ DLL项目。对于其中一个导出函数,有 BSTR __stdcall j2cs( const long lJulian, int bDMY, BSTR sDelim ) { USES_CONVERSION; int iDay, iMonth; long lYear; char chDate[20]; char chInt[10]; char * cDelim = W2A( sDelim );

如何在Win32 C+中使用malloca而不是alloca+;项目 我正在更新一个旧的C++ DLL项目。对于其中一个导出函数,有 BSTR __stdcall j2cs( const long lJulian, int bDMY, BSTR sDelim ) { USES_CONVERSION; int iDay, iMonth; long lYear; char chDate[20]; char chInt[10]; char * cDelim = W2A( sDelim );,c++,malloc,bstr,alloca,C++,Malloc,Bstr,Alloca,W2A宏定义为 #define W2A(lpw) (\ ((_lpw = lpw) == NULL) ? NULL : (\ (_convert = (static_cast<int>(wcslen(_lpw))+1), \ (_convert>INT_MAX/2) ? NULL : \ ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*

W2A
宏定义为

#define W2A(lpw) (\
    ((_lpw = lpw) == NULL) ? NULL : (\
        (_convert = (static_cast<int>(wcslen(_lpw))+1), \
        (_convert>INT_MAX/2) ? NULL : \
        ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), _acp))))
#define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)
如何对W2A宏进行建议的更改?还是我应该忽略这个警告

以后

My USES\u转换宏定义为

#define W2A(lpw) (\
    ((_lpw = lpw) == NULL) ? NULL : (\
        (_convert = (static_cast<int>(wcslen(_lpw))+1), \
        (_convert>INT_MAX/2) ? NULL : \
        ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw, _convert*sizeof(WCHAR), _acp))))
#define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)

W2A
无法更改为使用
malloc
。您必须在所有使用
W2A
的地方添加
free
。理想的替代方案是
std::vector
代替
\u alloca

更新宏
使用_转换
,因此它包含
std::vector\u缓冲区并更新宏
W2A

#define USES_CONVERSION int _convert = 0; (_convert); std::vector<WCHAR> _buffer; (_buffer); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa)

#define W2A(lpw) (\
    ((_lpw = lpw) == NULL) ? NULL : (\
        (_convert = (static_cast<int>(wcslen(_lpw))+1), \
        (_convert>INT_MAX/2) ? NULL : \
        (_buffer.resize(_convert), \
        ATLW2AHELPER((LPSTR) _buffer.data(), _lpw, _convert*sizeof(WCHAR), _acp)))))
#定义使用_conversionint _CONVERSION=0;(_);std::vector\u缓冲区;(_)缓冲区;UINT\u acp=ATL::\u AtlGetConversionACP()/*CP\u THREAD\u acp*/;(非加太),;LPCWSTR_lpw=NULL;(_lpw);LPCSTR _lpa=NULL;(_lpa)
#定义W2A(lpw)(\
((_-lpw=lpw)==NULL)?NULL:(\
(_convert=(静态_cast(wcslen(_lpw))+1)\
(_convert>INT_MAX/2)?空:\
(_buffer.resize(_convert)\
atlw2aheloper((LPSTR)_buffer.data(),_lpw,_convert*sizeof(WCHAR),_acp()()()))

我添加了更多细节。我看不到USES_转换的定义中应该使用
std::vector
符号。更新了答案。