2011-01-10 108 views
0

我有一個結構:傳遞結構的功能用C

PROCESSENTRY32 pe32; 

我想這個結構傳遞給函數。該函數將創建一個文件並將結構中的數據寫入該文件。函數的名稱是takeinput()。我通過結構功能:

errflag = takeinput (&pe32);

在takeinput(PROCESSENTRY32 * pe31)中,我使用createfile()創建了一個文件D:\ File.txt。現在我必須將日期寫入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 

這裏h文件我知道。後三個我知道。但我對DataBuffer參數感到困惑。什麼通過那裏?結構pe31中有許多變量。有人可以幫我嗎?

如果還有另一種方法將結構的數據寫入file.txt,請給我解釋一下。提前致謝。

+0

爲什麼你的文件名是file.txt,你想用二進制格式還是文本寫數據? – honibis 2011-01-10 09:41:54

回答

2

這是保存您的數據的緩衝區。您的通話將被:

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

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。

0

你看了documentationWriteFile函數嗎?這可能會幫助您瞭解每個參數所用的參數以及它們的含義。

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

你說你對DataBuffer參數感到困惑。 MSDN解釋這是:

指向包含要寫入文件或設備的數據的緩衝區的指針。

該緩衝區在寫入操作期間必須保持有效。寫操作完成之前,調用方不得使用此緩衝區。

因此,在本質上,DataBufferlpBuffer)的參數是你提供你想要寫出到文本文件中的數據。

有一個如何打開和寫入文件here的完整示例。你應該能夠跟隨代碼一起看看如何爲你的特定情況編碼。