关于C#的管道问题

问题描述

各位大牛,新人求教~~目前的问题是:我在C#编写的主控端写了一个管道NamedPipeServerStreamserver=newNamedPipeServerStream("MyPipe",PipeDirection.InOut,1,PipeTransmissionMode.Byte,PipeOptions.Asynchronous,1204,1024);管道的客户端是一个底层的EXE程序,是用C++写的hNamedPipe=CreateFile(pPipeName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);pPipeName=“MyPipe”;现在我已经在主控端和客户端成功的建立了一个管道,并且已经实现了通信不过我的主控端又调用了一个C++写的DLL函数,这个函数需要用我建立的这个管道向客户端发消息,所以我必须把我建的这个管道的标识符也就是句柄传给这个dll函数,这样这个函数才能用我建的这个管道实现通信,那么问题来了。。就是我怎么获得C#当中编写的管道的句柄值

解决方案

解决方案二:
好难啊,我还没学到
解决方案三:
先找c++程序员问问到底要什么“句柄”来读取命名管道?
解决方案四:
既然你“在C#编写的主控端写了一个管道”,那么你就在c#端再写一个真正可以使用这个管道的程序吧。那样等你真正搞懂了命名管道的概念,再跟所谓的c++程序员来谈接口问题,会更好。
解决方案五:
您好,谢谢您的回复,我这边的C++已经可以实现通信了,但是C++那边要求传过去一个句柄值,我在想是不是这个句柄值也就是这个管道的首地址值??我发现了一个这个类SafePipeHandle,说是可以返回server这个对象的句柄值,但是我又查了一下在c#调用C++的dll时C++中的参数handle与C#中的参数intptr是相对应的,所以我现在就在纠结这个safepipehandle怎么和intptr联系起来呢?谢谢赐教~!
解决方案六:
引用3楼sp1234的回复:

既然你“在C#编写的主控端写了一个管道”,那么你就在c#端再写一个真正可以使用这个管道的程序吧。那样等你真正搞懂了命名管道的概念,再跟所谓的c++程序员来谈接口问题,会更好。

您好,谢谢您的回复,我这边的C++已经可以实现通信了,但是C++那边要求传过去一个句柄值,我在想是不是这个句柄值也就是这个管道的首地址值??我发现了一个这个类SafePipeHandle,说是可以返回server这个对象的句柄值,但是我又查了一下在c#调用C++的dll时C++中的参数handle与C#中的参数intptr是相对应的,所以我现在就在纠结这个safepipehandle怎么和intptr联系起来呢?谢谢赐教~!
解决方案七:

解决方案八:
有意思,在Windows中进程中的句柄是独立的,换句话说,你把C#进程中的句柄0xaaaaaaaa,传递给C++进程,天知道在C++进程中0xaaaaaaaa指向的是个什么东西!但是,这就没办法了吗?有的,参考Windows进程中的句柄管理。
解决方案九:
不过目前我都还没处理到传句柄的那部分,我连C#这边的句柄都不知道怎么建,关键这是个管道的句柄,C#不像C++一样创建管道的时候就返回了一个句柄,我这还不知道C#创建管道怎么获得它的句柄值呢??不过还是谢谢LS的回复
解决方案十:
哈哈,已经知道怎么获得C#端的管道句柄啦,用safepipehandle.DangerousGetHandle()方法,可以返回一个intptr类型的句柄值
解决方案十一:
很久以前用过管道,不记得有这么复杂啊,关注。
解决方案十二:
引用10楼piaopiao_lucky的回复:

很久以前用过管道,不记得有这么复杂啊,关注。

是啊,单独C#和单独C++建管道不是很复杂,这俩要弄一块去就不知道咋搞了

时间: 2024-08-02 19:23:09

关于C#的管道问题的相关文章

shell pipe-vmstat n 管道至 curl

问题描述 vmstat n 管道至 curl 使用 vmstat n命令每间隔n秒不间断的输出系统状态.而目前想把每次输出状态立即通过curl POST到一个url上.是否可以通过管道完成? 解决方案 You can use the -d option in curl with a @- argument to accept input from a pipe. http://serverfault.com/questions/313599/how-do-i-pipe-the-output-of

c-关于Windows下管道通信的问题

问题描述 关于Windows下管道通信的问题 我想要通过管道通信控制CMD,能从父进程读数据就是写不了,WriteFile后没反应,szCOMMAND改成随便一个DOS命令,就是没反应,没辙了,请问代码什么地方出了问题呢? SECURITY_ATTRIBUTES sa; SECURITY_ATTRIBUTES sa1; HANDLE hRead_A, hWrite_A; HANDLE hRead_B, hWrite_B; sa.nLength = sizeof(SECURITY_ATTRIBUT

linux-Linux下怎样实现VPN数据管道?

问题描述 Linux下怎样实现VPN数据管道? 手上有A.B两台服务器,A服务器一直空着,B服务器部署有VPN服务(应该都知道在哪) 最近直连B服务器网络不是很好然后我就想通过A服务器连接到B服务器最后访问网络以保证其稳定性而不会出现200-2000这种不稳定的坑爹延迟,即本地连接A服务器然后由A服务器将数据传给B服务器然后由B服务器访问网络 问了下周围的朋友,他们说用iptunnel+iprule或者VPN+路由(C/S)的方法即可实现,但无奈,这些我都不会所以我就想问问我该怎么实现? 补充:

编写程序,子进程通过管道向父进程发出字符串"ok".

编写程序,子进程通过管道向父进程发出字符串"ok". 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 int main(void) { 5 int data_processed; //用于记录已经处理的数据 6 int file_pipes[2]; //定义两个文件描述符 7 char buffer[BUFSIZ + 1]; //定义一个缓冲区,以便从管道中读取数据

消息队列和管道的区别(转载)

转载自:http://bbs.chinaunix.net/viewthread.php?tid=265266 作者:beginner-bj 请问管道和消息队列有什么不同  管道通信(PIPE) 管道通信方式的中间介质是文件,通常称这种文件为管道文件.两个进程利用管道文件进行通信时,一个 进程为写进程,另一个进程为读进程.写进程通过写端(发送端)往管道文件中写入信息:读进程通过读 端(接收端)从管道文件中读取信息.两个进程协调不断地进行写.读,便会构成双方通过管道传递信息 的流水线. 利用系统调用

ASP.NET Web API Selfhost宿主环境中管道、路由

前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这个框架由于宿主环境的不同在不同的宿主环境中管道中的实现机制和路由的处理方式有着很大的不同,所以我会将对应不同的宿主环境来分别的做出简单的讲解.  ASP.NET Web API路由.管道     ASP.NET Web API 开篇介绍示例     ASP.NET Web API 路由对象介绍     ASP.NET Web API 管道模型     ASP.NET

如何实现100%的动态数据管道(二)

动态|数据 主要思路解决了,下面开始写详细设计(以Sybase ASE数据库为例,其他各位扩展):             1.建立中间层表vdt_columns,这个表的属性用于构建管道中的列资料.             执行类似的代码生成:             ls_sql = "create table vdt_columns ("            ls_sql +="uid              int             null    ,&qu

如何实现100%的动态数据管道(三)

动态|数据 下面看看,如何根据中间层的数据,构建管道语法: 1.首先建立一个数据窗口对象:d_vdtcolumns SQL语法是:  SELECT vdt_columns.utid,            vdt_columns.uid,            vdt_columns.upkey,            vdt_columns.udmid,            vdt_columns.udmname,            vdt_columns.unulls,        

利用Visual C#实现Windows管道技术

visual|window 管道技术一般采用Window API来实现,最近我试着用C#来实现Windows管道技术,发现C#本身方便的进程线程机制使工作变得简单至极,随手记录一下,推荐给大家. 首先,我们可以通过设置Process类,获取输出接口,代码如下: Process proc = new Process();proc .StartInfo.FileName = strScript;proc .StartInfo.WorkingDirectory = strDirectory;proc

在.NET中使用命名管道完成进程间通信

进程 你曾经需要在同一台机器的两个.NET应用程序间进行数据交换吗?例如,一个Web站点和一个Windows服务?.NET框架提供了几种好的选择来完成进程间通信(IPC):Web Service,Remoting.最快的是Remoting,因为它使用TCP通道和二进制格式. 然而,如果需要频繁地从一个应用程序调用另外一个应用程序,并且你主要关心的是性能,Remoting还是显得慢了一点.让Remoting变慢的,不是协议,而是序列化. 通常来说,Remoting是很不错的,但如果仅限于本地机器的