【发布时间】:2017-12-09 18:28:19
【问题描述】:
我正在尝试在 vc++ 中创建命名管道。 我习惯了 C,我希望这个错误不仅仅与我不熟悉 C++ 有关。 我使用的代码如下:
#ifdef DEBUG
printf("%s\n%s\n", this->pipe_name, this->pipe_path);
#endif
this->pipe = CreateNamedPipe(
this->pipe_path,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT,
1,
this->pipe_buffer_size_kb * 1024,
this->pipe_buffer_size_kb * 1024,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
if (this->pipe != INVALID_HANDLE_VALUE) // Setup successful
return true;
if (GetLastError() != ERROR_PIPE_BUSY) // Some unexpected error occured
{
#ifdef DEBUG
printf("Failed to create named pipe: %d\n", GetLastError());
#endif
return false;
}
pipe_buffer_size_kb 为 8
我得到的输出如下:
>.\run.exe
p0
\\.\rftb\p0
Failed to create named pipe: 3
作为 IDE,我使用 Microsoft Visual Studio Community 2017(产品详情:Microsoft Visual Basic 2017) 我使用了一个空的项目模板并添加了 DEBUG 和 _CRT_SECURE_NO_WARNINGS 作为预处理器定义。
感谢任何帮助。
【问题讨论】:
-
阅读文档管道的名称可能不正确。阅读:msdn.microsoft.com/en-us/library/windows/desktop/…我阅读它的方式管道名称必须以
\\.\pipe\开头 -
它就是这样工作的。比你,我还以为是方案\\.\pipe_name\instance_name。但我不明白什么是实例。
-
此代码需要改进。我返回了 INVALID_HANDLE_VALUE。
-
我的字符串如下所示:\\\\.\\pipe\\pipe_com1 但我得到 INVALID_HANDLE_VALUE
标签: c++ visual-c++