pipe readfile overlapped Параметр задан неверно при локальной переменной

cp2015
Дата: 05.02.2015 11:08:22
Добрый день.
Есть pipe server:
typedef struct 
{ 
   OVERLAPPED oOverlap; 
   HANDLE hPipeInst; 
   TCHAR chRequest[BUFSIZE]; 
   DWORD cbRead;
   TCHAR chReply[BUFSIZE];
   DWORD cbToWrite; 
   DWORD dwState; 
   BOOL fPendingIO; 
} PIPEINST, *LPPIPEINST; 

PIPEINST Pipe[INSTANCES];

int _tmain(VOID) 
{
fSuccess = ReadFile( 
               Pipe[i].hPipeInst, 
               Pipe[i].chRequest, 
               BUFSIZE*sizeof(TCHAR), 
               &Pipe[i].cbRead, 
               &Pipe[i].oOverlap); 
}

Всё работает нормально, т.е. процесс ждёт поступления данных успешно читает их и идёт дальше.
Я хочу массив Pipe[INSTANCES] объявить внутри блока _tmain.
int _tmain(VOID) 
{
PIPEINST Pipe[INSTANCES];

fSuccess = ReadFile( 
               Pipe[i].hPipeInst, 
               Pipe[i].chRequest, 
               BUFSIZE*sizeof(TCHAR), 
               &Pipe[i].cbRead, 
               &Pipe[i].oOverlap); 

printf("%d \n",GetLastError());
}

Но функция возвращает ошибку 87 - "Параметр задан не верно". Не устраивает её почему-то именно последний параметр &Pipe[i].oOverlap. Если его задать NULL - то работает.

Почему нельзя массив Pipe объявить внутри блока main ? В чём разница для функции ReadFile ?
Dimitry Sibiryakov
Дата: 05.02.2015 11:26:27

cp2015
Почему нельзя массив Pipe объявить внутри блока main ? В чём разница для
функции ReadFile ?

Эта функция не любит работать с неинициализированными переменными. Почитай про отличия
глобальных переменных от локальных.

Posted via ActualForum NNTP Server 1.5

Изопропил
Дата: 05.02.2015 11:29:19
cp2015,

Отличия в инициализации структуры OVERLAPPED

Заполни нулями и будет работать
cp2015
Дата: 05.02.2015 12:02:27
Спасибо, заработало.