Ecco qui il codice:

in un header ReadTextFromFile.h
codice:
//ReadTextFromFile.h
#include <stdio.h>
#include <cstdio>
#include <Windows.h>
#include <string.h>
#include <tchar.h>

typedef unsigned long long INT64BIT;

typedef struct _s_FileInfo
    {
    BOOL bFileExisting_ ; //out se TRUE il file esiste e viceversa
    TCHAR * szTextInFile ;  //out contenuto del file
    TCHAR * szFilePath ;   //in Path del file
    TCHAR * szFileName ; //out Nome del file senza la path
    TCHAR * szFileExtension ; //out Estensione del file
    TCHAR * szOpenMode ; //in Da settare sempre "r", "r+" o "r+b"
    INT64BIT i64bFileSize ; //Grandezza del file
    }s_FileInfo ;

DWORD GetTextFromFile(s_FileInfo * s_FI);
Questa è la struttura in cui verranno memorizzate le informazioni di un file

ed ecco invece il codice che riempe la struttura: tengo a sottolineare che non mi da errore di runtime sempre ma solo quando il processo è terminato in modo anomalo, penso che comunque abbia scritto il codice in modo poco portabile.....

Dove scrivo //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< penso che ci sia un errore
codice:
#include "stdafx.h"
#include <stdio.h>
#include <cstdio>
#include <Windows.h>
#include <string.h>
#include <tchar.h>
#include "ReadTextFromFile.h"


#if !READ_TEXT_FROM_FILE_H
#define READ_TEXT_FROM_FILE_H 1

#define GTFF_SUCCESSED             0
#define GTFF_CANNOT_OPEN_FILE      1
#define GTFF_THE_FILE_DOESNT_EXIST 2
#define GTFF_CANNOT_READ_THE_FILE  3

#define DELETE_STRING ; /* \
{\
    {\
    s_FI->szFilePath = new TCHAR [1];\
    s_FI->szFileName = new TCHAR [1];\
    s_FI->szFileExtension = new TCHAR [1];\
	szTextInFileBuffer = new TCHAR [1];\
	szFgetsBuffer = new TCHAR [1];\
    delete [] s_FI->szFilePath;\
    delete [] s_FI->szFileName;\
    delete [] s_FI->szFileExtension;\
	delete [] szTextInFileBuffer\
	delete [] szFgetsBuffer;\
    }\
}*/
//qui è da modificare....se tolgo il commento e lo metto come macromi da problemi.....
//contando che in un exe questa funzione può essere utilizzata più volte...sono un po confusionato!!!
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


DWORD GetTextFromFile(s_FileInfo * s_FI)
{

static BOOL bAlreadyCalled_ = FALSE;


bAlreadyCalled_ = TRUE;
TCHAR ** szFileName = &(s_FI->szFilePath);

//Check if the file is existing
WIN32_FIND_DATA wfd;
//WBox(s_FI->szFilePath);
HANDLE hFind = FindFirstFile(
  s_FI->szFilePath,
  &wfd
);
if (hFind == INVALID_HANDLE_VALUE)
    {
    s_FI->bFileExisting_ = FALSE;
    MessageBox(NULL,_T("The file doesn't exist"),_T("Fatal Error"),MB_ICONERROR);
    DELETE_STRING
    return GTFF_THE_FILE_DOESNT_EXIST;
    }
    
s_FI->bFileExisting_ = TRUE;

#define GTFF_SIZE_OF_FILE (wfd.nFileSizeHigh * (MAXDWORD+1) + wfd.nFileSizeLow)
s_FI->i64bFileSize = GTFF_SIZE_OF_FILE; 

//Open the file

FILE * FFileToOpen;
FFileToOpen = fopen(s_FI->szFilePath,s_FI->szOpenMode);
if(FFileToOpen == NULL)
    {
    MessageBox(NULL,_T("Cannot open the file"),_T("Fatal Error"),MB_ICONERROR);
    DELETE_STRING
    return GTFF_CANNOT_OPEN_FILE;
    }

//Read text form file
TCHAR * szFgetsBuffer; 
szFgetsBuffer = new TCHAR [GTFF_SIZE_OF_FILE / sizeof(TCHAR)];
TCHAR * szTextInFileBuffer; 
szTextInFileBuffer = new TCHAR [GTFF_SIZE_OF_FILE / sizeof(TCHAR)];
szTextInFileBuffer[0] = _T('\0');

for(int i = 0; i < 1;)
    {
    if(fgets(szFgetsBuffer,GTFF_SIZE_OF_FILE,FFileToOpen) == NULL)
        break; 
    _tcscat(szTextInFileBuffer,szFgetsBuffer);
    }

/*
int iResult = fread(szScanfBuffer, sizeof(TCHAR), GTFF_SIZE_OF_FILE, FFileToOpen);
if(
  (iResult > GTFF_SIZE_OF_FILE /sizeof(TCHAR) && iResult != 0) ||
  (iResult > GTFF_SIZE_OF_FILE /sizeof(TCHAR) && iResult < GTFF_SIZE_OF_FILE /sizeof(TCHAR))
  )
    MessageBox(NULL,"The file may be not corrispondent to the selected","Warning",MB_ICONWARNING);

if(iResult < 0 )
    {
    MessageBox(NULL,"Cannot read the file","Fatal error",MB_ICONERROR);
    return GTFF_CANNOT_READ_THE_FILE;
    }
*/

//Set file name into the structure

s_FI->szFileName = new TCHAR [_tcslen(s_FI->szFilePath) + 1];


for(int i = 0, j = 0; i < _tcslen(s_FI->szFilePath) + 1; i++)
    {
    if(s_FI->szFilePath[i] == _T('\0'))
        {
        s_FI->szFileName [j] = s_FI->szFilePath[i];
        }
    if(s_FI->szFilePath[i] == _T('\\'))
        {
        j = 0;
        s_FI->szFileName[0] = _T('\0');
        }
    else if(s_FI->szFilePath[i] != _T('\\'))
        {
        s_FI->szFileName [j] = s_FI->szFilePath[i];
        j++;
        }
    }

//Set file extension into the structure
s_FI->szFileExtension = new TCHAR [_tcslen(s_FI->szFilePath) + 1];


for(int i = 0, j = 0; i < _tcslen(s_FI->szFilePath) + 1; i++)
    {
    if(s_FI->szFilePath[i] == _T('\0'))
        {
        s_FI->szFileExtension [j] = s_FI->szFilePath[i];
        }
    if(s_FI->szFilePath[i] == _T('.'))
        {
        j = 0;
        s_FI->szFileExtension[0] = _T('\0');
        }
        else if(s_FI->szFilePath[i] != '.')
        {
        s_FI->szFileExtension [j] = s_FI->szFilePath[i];
        j++;
        }
    }
if(_tcscmp(s_FI->szFileExtension,s_FI->szFilePath) == 0) 
    s_FI->szFileExtension [0] = _T('\0');

s_FI->szTextInFile = new TCHAR [_tcslen(szTextInFileBuffer) + 1];

_tcscpy(s_FI->szTextInFile,szTextInFileBuffer);
fclose(FFileToOpen);
DELETE_STRING
return GTFF_SUCCESSED;                
}

#endif //READ_TEXT_FROM_FILE_H

il codice è facilmente leggibile......help me