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

如何调用远程进程

楼主sodawater()2000-03-12 09:29:00 在 VC/MFC / 进程/线程/DLL 提问

各位大虾:  
   
                如何在本地进程中调用远端计算机上的进程 问题点数:70、回复次数:6Top

1 楼rosement()回复于 2000-03-12 11:45:00 得分 70

回答这个问题其实就是RPC的编程:开发RPC应用程序,一个重要的要素就是接口。显然在客户和服务器的接口存根必须基于完全相同的函数定义上;否则RPC会失败。  
  1.定义接口(HELLO.IDL):  
  [  
          uuid(0EB13191-F7C4-11d3-BF4A-00104B17A4FB),/*注意你必须在自己的程序中生成自己的UUID,利用GUIDGEN应用程序,在VISUAL   STUDIO中*/  
   
          version(1.0)  
  ]  
  2.应用程序配置文件(HELLO.ACF)  
  [  
          implicit_handle(handle_t   hello_IfHandle)  
          //implicit_handle   的使用规定作为全局变量维护句柄  
  ]  
  interface   hello  
  {  
  }  
  3.编译HELLO.IDL  
  MIDL   HELLO.IDL  
  编译的结果生成HELLO_C.C,HELLO_S.C,HELLO.H  
  你看一下这些文件,发现了什么?!  
  4.编写服务器程序  
  #include   <stdlib.h>  
  #include   <stdio.h>  
  #include   "hello.h"  
   
  void   HelloProc(const   unsigned   char*   pszString)  
  {  
  printf("%s\n",pszString);  
  }  
   
  void   Shutdown(void)  
  {  
  RpcMgmtStopServerListening(NULL);  
  RpcServerUnregisterIf(NULL,NULL,FALSE);  
  }  
   
  void   main(int   argc,char*   argv[])  
  {  
  RpcServerUseProtseqEp((unsigned   char   *)"ncacn_ip_tcp",20,(unsigned   char   *)"8000",NULL);  
  RpcServerRegisterIf(hello_v1_0_s_ifspec,NULL,NULL);  
  RpcServerListen(1,20,FALSE);  
  }  
   
  void   __RPC_FAR*   __RPC_USER   midl_user_allocate(size_t   len)  
  {  
  return(malloc(len));  
  }  
   
  void   __RPC_USER   midl_user_free(void   __RPC_FAR   *ptr)  
  {  
  free(ptr);  
  }  
  interface   hello  
  {  
        void   HelloProc([in,string]const   unsigned   char*   pszString);  
        void   Shutdown(void);  
  }  
  5.编译服务器程序  
  CL   HELLOS.C   HELLO_S.C   RPCRT4.LIB  
  生成HELLOS.EXE  
  6.编写客户程序  
  #include   <stdlib.h>  
  #include   <stdio.h>  
  #include   <string.h>  
  #include   "hello.h"  
   
  void   main(int   argc,char*   argv[])  
  {  
  unsigned   char*   pszStringBinding;  
   
  if(argc!=3)  
  {  
  printf("Usage:%s   hostname   string-to-print\n",argv[0]);  
  exit(1);  
  }  
   
  RpcStringBindingCompose(NULL,(unsigned   char*)"ncacn_ip_tcp",(unsigned   char*)argv[1],(unsigned   char*)"8000",NULL,&pszStringBinding);  
  RpcBindingFromStringBinding(pszStringBinding,&hello_IfHandle);  
  if(strcmp(argv[2],"SHUTDOWN"))HelloProc((unsigned   char*)argv[2]);  
  else   Shutdown();  
  RpcStringFree(&pszStringBinding);  
  RpcBindingFree(&hello_IfHandle);  
  exit(0);  
  }  
   
  void   __RPC_FAR*   __RPC_USER   midl_user_allocate(size_t   len)  
  {  
  return(malloc(len));  
  }  
   
  void   __RPC_USER   midl_user_free(void   __RPC_FAR   *ptr)  
  {  
  free(ptr);  
  }  
  7.编译客户程序  
  CL   HELLOC.C   HELLO_C.C   RPCRT4.LIB  
  生成HELLOC.EXE  
  8.测试程序  
  在两个DOS窗口中运行,一个运行HELLOS,在同一台机器上,另一个运行HELLOC   LOCALHOST   “HELLO”  
  看看发生了什么?  
   
  Top

2 楼sodawater()回复于 2000-03-13 12:05:00 得分 0

看不太懂,请用VISUALC6。0语言重新写过Top

3 楼rosement()回复于 2000-03-13 16:01:00 得分 0

这就是VC6写的!!!Top

4 楼sodawater()回复于 2000-03-18 08:48:00 得分 0

请加一点注释?Top

5 楼lu0(lu0.126.com)回复于 2000-03-18 09:44:00 得分 0

苏打水啊,人家的例程这么清晰明了还要注释,看来要在CSDN上写书教你了.:)Top

相关问题

  • 如何远程调用mts?
  • 如何远程调用EJB?
  • 如何远程调用存储过程?
  • PHP4.0 如何调用远程webservice
  • 请教高手进程内调用的进程如何结束
  • 0x8001011C: 在该进程中不允许远程调用,什么原因
  • 有请高手:如何在远程调用com组件
  • +++++++++++++如何远程调用配置在weblogic里的连接池?
  • 如何用SERVLET调用在本地或远程的EJB组件?
  • 请问如何使用C#调用远程COM?

关键词

  • 应用程序
  • 接口
  • 服务器
  • 客户
  • null
  • pszstringbinding
  • hello
  • ifhandle
  • helloproc
  • helloc

得分解答快速导航

  • 帖主:sodawater
  • rosement

相关链接

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

广告也精彩

反馈

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