在C语言中将结构传递给函数

在C语言中将结构传递给函数,c,windows,winapi,visual-c++,file,C,Windows,Winapi,Visual C++,File,我有一个结构: PROCESSENTRY32 pe32; 我想把这个结构传递给一个函数。该函数将创建一个文件,并将结构中的数据写入该文件。函数的名称为takeinput()。我将结构传递给函数: errflag=takeinput(&pe32) 在takeinput(PROCESSENTRY32*pe31)中,我使用createfile()创建了一个文件D:\file.txt。现在我必须将日期从写入file.txt。我正在使用: WriteFile(

我有一个结构:

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
这是我知道的。最后三个我知道。但我对数据缓冲参数感到困惑。在那里要通过什么?结构pe31中有许多变量。有人能帮我吗


如果有其他方法将结构的数据写入file.txt,请向我解释。提前谢谢

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。

您是否阅读了有关
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
)参数是提供要写入文本文件的数据的地方


这里有一个关于如何打开和写入文件的完整示例。您应该能够按照代码来查看如何为您的特定案例编写代码。

这是保存数据的缓冲区。您的电话是:

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
}

返回后,
dwbytesWrite
应等于
sizeof(PROCESSENTRY32)

为什么文件名为file.txt,您想以二进制格式还是文本格式写入数据?