错误:未声明'GetNamedPipeClientProcessId'但包含Winbase

时间:2018-04-14 15:02:06

标签: c windows winapi cygwin pipe

我正在使用Windows 10(1709)和cygwin。这是我的代码:

#include <windows.h>
#include <stdio.h>  
#include <Winbase.h>

int main()
{

    HANDLE hPipe;
    char buffer[1024];
    DWORD dwRead;
    PULONG ClientProcessId = NULL;


    hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Pipe"),
                            PIPE_ACCESS_DUPLEX,
                            PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
                            1,
                            1024 * 16,
                            1024 * 16,
                            NMPWAIT_USE_DEFAULT_WAIT,
                            NULL);
    while (hPipe != INVALID_HANDLE_VALUE)
    {
        if (ConnectNamedPipe(hPipe, NULL) != FALSE)
        {
             if (GetNamedPipeClientProcessId(hPipe, ClientProcessId) != 0)
             {
                  printf("ID -> %lu\n", ClientProcessId);
                  fflush(stdout);
             }
        }
    }
}

这是一个小测试程序,只是创建一个服务器管道并开始监听它,当有人连接时,它只打印管道客户端进程ID。

我遇到的问题是

error: ‘GetNamedPipeClientProcessId’ was not declared in this scope
          if (GetNamedPipeClientProcessId(hPipe, ClientProcessId) == 0)

由于我收到了Winbase.h,这真的很奇怪,我打开了Winbase.h并找到了这个函数的声明:

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

WINBASEAPI
BOOL
WINAPI
GetNamedPipeClientProcessId(
    _In_ HANDLE Pipe,
    _Out_ PULONG ClientProcessId
    );

快速谷歌搜索后,我发现WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)只是为了确定您拥有什么平台以及哪些API适合您的平台( winapifamily.h)。似乎它的功能应该可以在桌面平台上使用。

我在这里有点困惑。还有什么可能是问题?感谢。

0 个答案:

没有答案