Por que o Fopen falhou ao abrir um arquivo que existe?

Estou no Windows XP usando o Visual Studio 6 (sim, eu sei que é antigo) construindo / mantendo uma DLL C ++. Eu encontrei um problema com o fopen ao abrir um arquivo existente, ele sempre retorna NULL.

Eu tentei:

Verificando errno e _doserrno, definindo ambos como zero e depois verificando-os novamente, ambos permanecem zero e, portanto, GetLastError () não relata erros. Eu sei que o fopen não precisa definir errno quando encontrar um erro de acordo com um padrão C.Codifique o caminho do arquivo, que não é relativo.Tentei em outra máquina de desenvolvedores que o mesmo resultado.

O mais estranho é que o CreateFile funciona e o arquivo pode ser lido com o ReadFile. Acreditamos que isso funciona em uma compilação de versão, no entanto, também estamos vendo um comportamento muito estranho em outras áreas do aplicativo e não temos certeza se isso está relacionado.

O código está abaixo, não vejo nada de estranho, parece bastante padrão para mim. O arquivo de origem não mudou por pouco menos de meio ano.

HRESULT CDataHandler::LoadFile( CStdString szFilePath )
{
    //Code
    FILE* pFile;
    if ( NULL == ( pFile = fopen( szFilePath.c_str(), "rb") ) )
    {
        return S_FALSE;
    }
    //More code
}

questionAnswers(5)

yourAnswerToTheQuestion