【发布时间】:2014-05-17 12:08:50
【问题描述】:
我有两个程序在同一台计算机上运行,我需要它们说话。一个是使用旧的 windows32 框架用 C++ 编写的现有程序。另一个是使用 .NET 框架新编写的 C# 应用程序。我较新的 .NET 应用程序将充当服务器,而旧的现有应用程序将充当客户端。
我在客户端和服务器上都创建了命名管道。我只是无法让他们连接。我怀疑问题只是我没有正确匹配文件名(命名管道在后台使用文件)。
这是 .NET 服务器代码:
private volatile NamedPipeServerStream pipeServer;
pipeServer = new NamedPipeServerStream("MyPipe", PipeDirection.InOut);
pipeServer.WaitForConnection();
这是较旧的现有 win32 客户端代码:
HANDLE pipe = CreateFile(
"\\Device\\NamedPipe\\MyPipe",
GENERIC_READ | GENERIC_WRITE, // only need read access
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
我首先运行服务器代码,它就在那里等待连接。每次我的句柄都等于INVALID_HANDLE_VALUE。
我使用 ProcessExplorer 来查看是否可以找到管道的真实名称。根据 ProcessExplorer,名称是 \Device\NamedPipe\MyPipe。
我想我在客户端匹配这个。如果有人可以提出建议,我将不胜感激。谢谢。
【问题讨论】:
-
\Device\NamedPipe\MyPipe是内核看到的设备路径。根据 Jerry 的回答,Win32 子系统使用不同的语法。
标签: c# c++ .net winapi named-pipes