C++ 如果目录路径过长,SetupGetInfFileList函数将失败,并出现错误\u缓冲区不足\u

C++ 如果目录路径过长,SetupGetInfFileList函数将失败,并出现错误\u缓冲区不足\u,c++,winapi,C++,Winapi,有人能告诉我,当目录路径很长时,如何删除SetupGetInfFileList函数中的错误\u缓冲区不足 TCHAR*阿布弗; DWORD BufferSize=0,RequiredSize=0 BOOL bError = SetupGetInfFileList(DirectoryPath, INF_STYLE_WIN4, NULL, BufferSize, &RequiredSize); //First Call if (bError == FALSE) { if (la

有人能告诉我,当目录路径很长时,如何删除
SetupGetInfFileList
函数中的
错误\u缓冲区不足

TCHAR*阿布弗; DWORD BufferSize=0,RequiredSize=0

BOOL bError = SetupGetInfFileList(DirectoryPath, INF_STYLE_WIN4, NULL, BufferSize, &RequiredSize);  //First Call

if (bError == FALSE)
{ 
    if (lastError == ERROR_ACCESS_DENIED)
    {
        return RESULT2(ERR_SUCCESS);
    }
    else
    {
        return RESULT2(ERR_INI_FILELIST); //My code is giving me Error code 122 here.
    }
}

aBuffer = (TCHAR *)LocalAlloc(LPTR, dwRequiredSize * sizeof (TCHAR));

if (aBuffer == NULL)
{
    return RESULT2(ERROR_MEMORY_EXCEPTION);
}

BufferSize = RequiredSize;

aError = SetupGetInfFileList(DirectoryPath, INF_STYLE_WIN4 , aBuffer, BufferSize, NULL);    //Second call

if (aError == FALSE)
{
我只在第一次调用中得到错误代码122和RequiredSize varaibale为0。
有人能给我一些解决方法吗。

错误\u缓冲区不足
表明基本问题是您提供的缓冲区太小,无法容纳所有数据。幸运的是,函数(以及变量)具有参数
RequiredSize

如果不是NULL,则指向一个变量,在该变量中,此函数返回ReturnBuffer参数指向的缓冲区所需的大小(以字符为单位)。这包括空终止符。如果指定了ReturnBuffer,并且所需的大小大于ReturnBufferSize,则函数将失败,并调用返回错误\u缓冲区不足

所以基本上你必须提供这个参数,它告诉你缓冲区有多大。目前我无法测试这一点,但基本上应该是这样的:

(注意,代码显然没有经过测试。)


谢谢你的回复,很抱歉我上次的回答不准确。
// initialize buffer and size of it
DWORD bufferSize = ...
PSTR buffer = ...


DWORD requiredSize = 0;
if (SetupGetInfFileListA(NULL, INF_STYLE_WIN4, buffer, bufferSize, &requiredSize) == 0
    && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
    // Buffer is too small.
    // (Re-)Allocate new buffer with at least requiredSize characters,
    // and then try again with new, larger buffer.
    ...
}