Mic*_*uer 1 .net c# c++ winapi named-pipes
我有两个程序在同一台计算机上运行,我需要它们进行通信。一种是使用较旧的 windows32 框架用 C++ 编写的现有程序。另一个是使用.NET 框架新编写的C# 应用程序。我的较新的 .NET 应用程序将充当服务器,而较旧的现有应用程序将充当客户端。
我在客户端和服务器上都创建了命名管道。我只是无法让它们连接起来。我怀疑问题只是我没有正确匹配文件名(命名管道在后台使用文件)。
这是 .NET 服务器代码:
private volatile NamedPipeServerStream pipeServer;
pipeServer = new NamedPipeServerStream("MyPipe", PipeDirection.InOut);
pipeServer.WaitForConnection();
Run Code Online (Sandbox Code Playgroud)
以下是较旧的现有 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
);
Run Code Online (Sandbox Code Playgroud)
我首先运行服务器代码,它坐在那里等待连接。每次我的句柄都等于INVALID_HANDLE_VALUE。
我使用 ProcessExplorer 来查看是否可以找到管道的真实名称。根据 ProcessExplorer,名称为\Device\NamedPipe\MyPipe。
我想我正在客户端匹配这个。如果有人可以提出建议,我将不胜感激。谢谢。
要使用 来打开命名管道CreateFile,您需要将文件名指定为\\.\pipe\name,因此在您的情况下,它看起来像:
HANDLE pipe = CreateFile(
"\\\\.\\Pipe\\MyPipe",
GENERIC_READ | GENERIC_WRITE, // only need read access
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |