CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

如何实现C编写的程序与MFC实现进程间数据共享?

楼主fjtuhcy(不可思艺)2005-05-18 21:16:40 在 VC/MFC / 进程/线程/DLL 提问

我打算用MFC程序调用那个C程序执行某些功能,然后要它把结果返回,不知道要用什么方法? 问题点数:20、回复次数:10Top

1 楼fjtuhcy(不可思艺)回复于 2005-05-18 21:44:25 得分 0

现在没人吗??Top

2 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-05-18 22:45:31 得分 2

用匿名管道Top

3 楼xyw2278(启明星)回复于 2005-05-19 00:05:42 得分 0

方法好多啊,就是进程间进行通信吧!  
  剪贴板,磁盘文件,Top

4 楼xyw2278(启明星)回复于 2005-05-19 00:08:45 得分 3

也可以使用管道的:  
   
  匿名管道由CreatePipe()函数创建,该函数在创建匿名管道的同时返回两个句柄:管道读句柄和管道写句柄。CreatePipe()的函数原型为:  
   
  BOOL   CreatePipe(PHANDLE   hReadPipe,   //   指向读句柄的指针  
   PHANDLE   hWritePipe,   //   指向写句柄的指针  
   LPSECURITY_ATTRIBUTES   lpPipeAttributes,   //   指向安全属性的指针  
   DWORD   nSize   //   管道大小  
  );    
   
    通过hReadPipe和hWritePipe所指向的句柄可分别以只读、只写的方式去访问管道。在使用匿名管道通信时,服务器进程必须将其中的一个句柄传送给客户机进程。句柄的传递多通过继承来完成,服务器进程也允许这些句柄为子进程所继承。除此之外,进程也可以通过诸如DDE或共享内存等形式的进程间通信将句柄发送给与其不相关联的进程。    
   
    在调用CreatePipe()函数时,如果管道服务器将lpPipeAttributes   指向的SECURITY_ATTRIBUTES数据结构的数据成员bInheritHandle设置为TRUE,那么CreatePipe()创建的管道读、写句柄将会被继承。管道服务器可调用DuplicateHandle()函数改变管道句柄的继承。管道服务器可以为一个可继承的管道句柄创建一个不可继承的副本或是为一个不可继承的管道句柄创建一个可继承的副本。CreateProcess()函数还可以使管道服务器有能力决定子进程对其可继承句柄是全部继承还是不继承。  
   
    在生成子进程之前,父进程首先调用Win32   API   SetStdHandle()使子进程、父进程可共用标准输入、标准输出和标准错误句柄。当父进程向子进程发送数据时,用SetStdHandle()将管道的读句柄赋予标准输入句柄;在从子进程接收数据时,则用SetStdHandle()将管道的写句柄赋予标准输出(或标准错误)句柄。然后,父进程可以调用进程创建函数CreateProcess()生成子进程。如果父进程要发送数据到子进程,父进程可调用WriteFile()将数据写入到管道(传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道的读句柄,将该句柄传入ReadFile()后从管道读取数据。  
   
    如果是父进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道的写入句柄,并调用WriteFile()将数据写入到管道。然后,父进程调用ReadFile()从管道读取出数据(传递管道读句柄给函数)。  
   
    在用WriteFile()函数向管道写入数据时,只有在向管道写完指定字节的数据后或是在有错误发生时函数才会返回。如管道缓冲已满而数据还没有写完,WriteFile()将要等到另一进程对管道中数据读取以释放出更多可用空间后才能够返回。管道服务器在调用CreatePipe()创建管道时以参数nSize对管道的缓冲大小作了设定。Top

5 楼fjtuhcy(不可思艺)回复于 2005-05-19 09:56:29 得分 0

在C中怎么写进程间通信阿??应该和MFC不一样吧?Top

6 楼fjtuhcy(不可思艺)回复于 2005-05-19 15:38:28 得分 0

求解Top

7 楼hard_stone()回复于 2005-05-19 17:50:57 得分 5

C里面如果注重可移值性可以用套接字实现,如果只是在WINDOWS环境下同样可以管道等,调用API就可以了。Top

8 楼heguosheng(何国胜)回复于 2005-05-23 20:53:53 得分 2

upTop

9 楼xyw2278(启明星)回复于 2005-05-24 17:48:41 得分 3

很简单的一个方法,  
  你可以在c把通信内容写入文件啊  
  然后在MFC中读Top

10 楼si_wei_chen(夺命炮手)回复于 2005-05-25 00:09:51 得分 5

共享内存,动态数据交换,socket,netbios,邮槽,管道,文件,剪贴板Top

相关问题

  • 在Visual C++ 编写的DLL(不用MFC)中如何加入版本信息?
  • 在Visual C++ 编写的DLL(不用MFC)中如何加入版本信息?
  • 如何在MFC中使用.net编写的组件(如C#写的)
  • 怎样编写进程的条条?
  • 用C语言编写!!
  • C++实现进程,线程
  • C++,MFC求助
  • 在C++builder5里面还能编写纯C/C++程序吗?
  • 关于用C语言编写CGI
  • 如何用C编写CGI程序

关键词

  • 函数
  • 数据
  • 服务器
  • 指针
  • 通信
  • mfc
  • 文件
  • 句柄
  • 管道
  • 进程

得分解答快速导航

  • 帖主:fjtuhcy
  • kugou123
  • xyw2278
  • hard_stone
  • heguosheng
  • xyw2278
  • si_wei_chen

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo