将结构传递给C中的函数

时间:2011-01-10 08:43:58

标签: c windows winapi visual-c++ file

我有一个结构:

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

这里我知道了。最后三个我知道。但我对DataBuffer参数感到困惑。通过什么?结构pe31中有许多变量。有人可以帮助我吗?

如果有另一种方法将结构数据写入file.txt,请解释一下。提前致谢。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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(()pe31)的指针并将其传递给WriteFile。

答案 2 :(得分:0)

您是否阅读了WriteFile函数的documentation这可能有助于您了解所使用的每个参数的用途及其含义。< / p>

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

你说你对DataBuffer参数感到困惑。 MSDN解释说这是:

  

指向包含要写入文件或设备的数据的缓冲区的指针。

     

此缓冲区必须在写入操作期间保持有效。在写操作完成之前,调用者不得使用此缓冲区。

因此,实质上,DataBufferlpBuffer)参数是您提供要写入文本文件的数据的地方。

有一个完整的例子,说明如何打开和写入文件here。您应该能够按照代码查看如何根据具体情况对其进行编码。