HANDLE h: переопределение [закрыт]

104
28 сентября 2019, 18:30

Разбираюсь с примером, но даже его скомпилировать не могу из-за того вылазит ошибка

HANDLE h: переопределение

#undef UNICODE
#include "stdafx.h"
#include <tchar.h>
#include <stdio.h>
//#include <strsafe.h>
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE  hCompletionPort;  
DWORD WINAPI thread(LPVOID)
{
    int  i = 0;                     
    DWORD  dwNumberOfBytes;         
    ULONG    ulCompletionKey;           
LPOVERLAPPED  lpOverlapped;      
cout << "The thread is started." << endl;
    while (GetQueuedCompletionStatus(
        hCompletionPort,  
        &dwNumberOfBytes,  
        &ulCompletionKey, 
        &lpOverlapped,     
        INFINITE))       

        if (ulCompletionKey == 0)
        {
            cout << endl << "The thread is finished." << endl;
            break;
        }
        else
            cout << "\tPacket: " << ++i << endl
            << "Number of bytes: " << dwNumberOfBytes << endl
            << "Completion key: " << ulCompletionKey << endl;
    return 0;
}
int main(int argc, char* argv[])
{
    HANDLE  h;    
    OVERLAPPED  ovl;  
    ULONG    ulKey;   
    HANDLE  hThread;  
    DWORD  dwThreadID; 

    ovl.Offset = 0;     
    ovl.OffsetHigh = 0;  
    ovl.hEvent = 0;     

    cout << "Input a number for file key (not zero): ";
    cin >> ulKey;
    if (ulKey == 0)
    {
        cout << "The file key can't be equal to zero." << endl
            << "Press any key to exit." << endl;
        return 0;
    }

    HANDLE h = CreateFileA("file.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (h == INVALID_HANDLE_VALUE)
    {
        cerr << "Create file failed." << endl
            << "The last error code: " << GetLastError() << endl;
        cout << "Press any key to finish." << endl;
        cin.get();
        return 0;
    }

    hCompletionPort = CreateIoCompletionPort(
        h,   
        NULL,    
        ulKey,  
        1        
    );

    if (hCompletionPort == NULL)
    {
        cerr << "Create completion port failed." << endl
            << "The last error code: " << GetLastError() << endl;
        cout << "Press any key to finish." << endl;
        cin.get();
        return 0;
    }

    hThread = CreateThread(NULL, 0, thread, NULL, 0, &dwThreadID);

    for (int i = 0; i < 10; ++i)
    {
        DWORD  dwBytesWrite;
        DWORD  dwRet;
        if (!WriteFile(
            h,      
            &i,        
            sizeof(i),  
            &dwBytesWrite,  
            &ovl         
        ))
        {
            dwRet = GetLastError();
            if (dwRet == ERROR_IO_PENDING)
                cout << "Write file pending." << endl;
            else
            {
                cout << "Write file failed." << endl
                    << "The last error code: " << dwRet << endl;
                return 0;
            }
        }
        WaitForSingleObject(h, INFINITE);
        ovl.Offset += sizeof(i);
    }

    PostQueuedCompletionStatus(
        hCompletionPort,   
        0,     
        0,     
        NULL);   

    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(h);
    CloseHandle(hCompletionPort);
    CloseHandle(hThread);
    cout << "The file is written." << endl;
    return 0;
}
Answer 1

Вы уж или уберите это:

HANDLE  h;

или HANDLE здесь:

HANDLE h = CreateFileA("file.txt", ...

А то вы два раза объявляете одну и ту же переменную...

READ ALSO
Почему такой результат?

Почему такой результат?

Пишу универсальный тип данных(мини-версию) Проблема возникла при вызове getInside();

129
-nan(ind) и nan

-nan(ind) и nan

Написал некий фрагмент кода (вообще пишу решение СЛАУ методом Гаусса), при данных значениях а и b, когда k >= 2 возникает ошибка -nan(ind) и nan (когда...

132
C++ захват переменной из лямбда функции

C++ захват переменной из лямбда функции

есть такая функция, которая принимает другую функцию:

124
динамический массив с++ [закрыт]

динамический массив с++ [закрыт]

Задача написать функцию на С++,переводящую число X из 10 системы счисления в 3

135