передача структуры функции в C - PullRequest
0 голосов
/ 10 января 2011

У меня есть структура:

PROCESSENTRY32 pe32;

Я хочу передать эту структуру функции.Функция создаст файл и запишет данные в структуре в этот файл.Имя функции - takeinput ().Я передал структуру функции:

errflag = takeinput (&pe32);

В takeinput (PROCESSENTRY32 * pe31) я создал файл D: \ File.txt с помощью createfile ().Теперь я должен написать дату в файл file.txt.Я использую:

WriteFile( 
                    hFile,           // open file handle
                    DataBuffer,      // start of data to write
                    dwBytesToWrite,  // number of bytes to write
                    &dwBytesWritten, // number of bytes that were written
                    NULL);            // no overlapped structure

Здесь hFile я знаю.Последние три я знаю.но я запутался в параметре DataBuffer.Что там пройти?В структуре pe31 много переменных.Кто-нибудь может мне помочь в этом?

Если есть другой способ записать данные структуры в файл file.txt, пожалуйста, объясните мне.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 января 2011

Это буфер, в котором хранятся ваши данные.Ваш звонок будет:

takeinput (PROCESSENTRY32* ppe32)
{
    WriteFile( 
                hFile,           // open file handle
                (void*)ppe2,      // pointer to buffer to write
                sizeof(PROCESSENTRY32),  // number of bytes to write
                &dwBytesWritten, // this will contain number of bytes actually written
                NULL);            // no overlapped structure

    // some other stuff
}

После возврата dwBytesWritten должно быть равно sizeof(PROCESSENTRY32).

0 голосов
/ 10 января 2011

Вы прочитали документацию для функции WriteFile? Это может помочь вам понять, для чего используется каждый из параметров, которые он принимает, и что они означают.

BOOL WINAPI WriteFile(
  __in         HANDLE hFile,
  __in         LPCVOID lpBuffer,
  __in         DWORD nNumberOfBytesToWrite,
  __out_opt    LPDWORD lpNumberOfBytesWritten,
  __inout_opt  LPOVERLAPPED lpOverlapped
);

Вы говорите, что запутались в параметре DataBuffer. MSDN объясняет, что это:

Указатель на буфер, содержащий данные для записи в файл или устройство.

Этот буфер должен оставаться действительным в течение всей операции записи. Вызывающая сторона не должна использовать этот буфер до завершения операции записи.

Итак, по сути, параметр DataBuffer (lpBuffer) - это место, где вы предоставляете данные, которые вы хотите записать в текстовый файл.

Полный пример того, как открыть и записать в файл здесь . Вы должны быть в состоянии следовать за кодом, чтобы увидеть, как кодировать его для вашего конкретного случая.

0 голосов
/ 10 января 2011

Подпись функции WriteFile равна

BOOL WINAPI WriteFile(
__in         HANDLE hFile,
__in         LPCVOID lpBuffer,
__in         DWORD nNumberOfBytesToWrite,
__out_opt    LPDWORD lpNumberOfBytesWritten,
__inout_opt  LPOVERLAPPED lpOverlapped
);

ваш DataBuffer - это lpBuffer в сигнатуре, а lpBuffer - это указатель на буфер, содержащий данные для записи в файл или устройство. Вы должны явно привести указатель на ваши данные (PROCESSENTRY32 pe31) к указателю на void ((void ) pe31) и передать его в WriteFile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...