C++ 为什么我的EnumWindowProc不能用C编译?

C++ 为什么我的EnumWindowProc不能用C编译?,c++,c,windows,reference,C++,C,Windows,Reference,我试图编写一个函数,从进程ID返回HWND,但有一个小问题。我得到的错误应该是一个标识符。仅当我删除窗口中的&in\u数据&data时,它才会编译,但该函数不起作用。。为什么首先需要&呢?代码编译在C++中,但不在C.中编译。 typedef struct { DWORD dwProcessID; HWND hWnd; } window_data; BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { win

我试图编写一个函数,从进程ID返回HWND,但有一个小问题。我得到的错误应该是一个标识符。仅当我删除窗口中的&in\u数据&data时,它才会编译,但该函数不起作用。。为什么首先需要&呢?代码编译在C++中,但不在C.</P>中编译。
typedef struct
{
    DWORD dwProcessID;
    HWND hWnd;
} window_data;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    window_data &data = *(window_data*)lParam;
    DWORD dwProcessID = 0;

    GetWindowThreadProcessId(hwnd, &dwProcessID);
    if (dwProcessID != data.dwProcessID)
        return TRUE;

    data.hWnd = hwnd;
    return FALSE;
}

C语言不支持变量引用引用,仅支持C++,因此Windows数据和数据无效。p> 如果要在标准C中执行此操作,可以改为指针浇铸版本:

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    window_data *data = (window_data*)lParam;
    DWORD dwProcessID = 0;

    GetWindowThreadProcessId(hwnd, &dwProcessID);
    if (dwProcessID != data->dwProcessID)
        return TRUE;

    data->hWnd = hwnd;
    return FALSE;
}

在C中没有C++中的类似引用。因此,您不能在C代码中使用窗口数据和数据。这就是为什么程序用C++编译器编译而不是用C编译器编译的原因。对我现在开始工作了
window_data &data = *(window_data*)lParam;