CLOUDLIU是运行服务器程序,JHYU是运行客户程序!

解决方案 »

  1.   

    CoCreateInstance,failed倒是很少见的主要看你请求的是什么接口,一般想IID_IUnknwon,IID_IDispatch这些接口的调度微软已经作好,所以一般不会失败(当然网络问题,和你的参数不对除外)。如果请求的是自定义接口失败的原因是你没有为你的接口实现调度代码所以才会失败。就一般的COM远程只能够使用IDispatch接口的。
    如果上面都不是问题就是权限设置的问题,不会你的用户连启动的权限都没有吗,还有某写改动需要启动机器的,比如是否起用分布式COM。
    我现在也在玩这个问题,交流交流
      

  2.   

    wyzegg(蛋):
    我找到了问题的所在!我当时只设置了访问权限,没有设置启动和配置权限,所以当然不成功了!
    另外,当我在EXE服务器的接口的函数中用一个MessageBox(NULL,"GetName","Name",MB_OK);函数的时候,作为本地的服务器可以调用此接口的函数成功,当服务器作为远程调用的时候,就不能成功!不知道是什么原因?
      

  3.   

    ccf123(ccf):
    你是说MessageBox不能弹出来的原因吗?
      

  4.   

    那为什么在本地运行时,就可以弹出MessageBox呢?
      

  5.   

    我觉得如果本地的进程外组件能够弹出MessageBox的话,那么dcom肯定也可以。
    你看看,有什么错误信息。
      

  6.   

    就是创建对象失败(CoCreateInstance  Failed!)
      

  7.   

    1. 代理问题
      进程内组件为dll,当需要远程调用时需要在本地有一个代理程序,缺省的代理 
      程序是dllhost.exe。需要在
      HHEY_CLASSES_ROOT\APPID\6698c102-8e22-4e93-a9cd-ba4421901cb8
      下添加字符串值dllsurrogate值为代理程序所处的位置,  
      如果值为空表示使用缺省代理。
    2. 调度问题
      微软只实现啦IDsiaptch接口的调度,如果我们希望在远程调用客户程序中使用自定义接口
      就需要实现接口的调度程序,幸运的是,MIDL已经为我们产生了标准调度代码,我们只需要使用这些代码
      生成一个DLL的调度程序。这些代码包括xxx_i.c,xxx.p.c,xxx.h.这些代码可以自动的导出
      DllGetClassObject
      DllCanUnloadNow 
      DllRegisterServer
      DllUnregisterServer
      函数
      这样我们可以建立一个WIN32 DLL的工程添加一个DEF文件编译后,在服务器和客户端注册。
      就是一个一个标准的调度程序,在该DLL的支持下可以实现自定义接口的远程调度。
      注册表项为
      [HKEY_CLASSES_ROOT\CLSID\{C4A7C2E7-5EAC-4367-8F0D-59ECDB66CE3B}]
      @="PSFactoryBuffer"
      [HKEY_CLASSES_ROOT\CLSID\{C4A7C2E7-5EAC-4367-8F0D-59ECDB66CE3B}\InProcServer32]
      @="调度程序路径"
      "ThreadingModel"="Both"
      [HKEY_CLASSES_ROOT\Interface\{C4A7C2E7-5EAC-4367-8F0D-59ECDB66CE3B}]
      @="ISObject"
      [HKEY_CLASSES_ROOT\Interface\{C4A7C2E7-5EAC-4367-8F0D-59ECDB66CE3B}\NumMethods]
      @="方法数目"
      [HKEY_CLASSES_ROOT\Interface\{C4A7C2E7-5EAC-4367-8F0D-59ECDB66CE3B}\ProxyStubClsid32]
      @={C4A7C2E7-5EAC-4367-8F0D-59ECDB66CE3B}
      以上注册表项都是有调度程序自动注册的
    3.客户端的问题
      远程服务器的名字 可在注册表中用remoteservername指定
      也可以在程序中指定,
      下面例子就是在程序中指定的
    4.安全性问题,
      包括公开的安全性和编程的安全性
      如果允许匿名用户访问则指定guest或network或internet内置用户的访问
      当然也可以指定用户访问。
    5.re
        a.如果是DLL的组件,要远程调用需要代理程序的支持,如果有代理程序并且组件支持IDispatch接口,
          则可以使用IDispatch远程访问。
        b,如果是DLL的组件,要远程调用,使用自定义接口。则不仅需要代理程序的支持也需要proxy/stub调度
          程序的支持
        c.exe的组件不需要代理程序,但是如果使用自定义接口仍然需要调度DLL的支持。
          两者都可以使用公开的安全性和编程的安全性
    6.mts
      mts是COM运行的平台,已经上述功能,并且可以导出客户端的安装。有很方便的管理
      

  8.   

    创建对象失败(CoCreateInstance  Failed!)都失败了!哪也看不见呀!
      

  9.   

    没有,不过我现在正在仔细看Inside COM 和潘爱明的书,我想还是我的基础知识不够!
      

  10.   

    回复人: wyzegg(蛋) (2001-8-3 0:30:03) 
    这个帖子,就差不多可以解决远程调用的问题的,如果是ATL dll的没有appid项,可以自己用uuidgen得到一个uuid手工加入。
      

  11.   

    敬请关注 
    专家门诊/扩充话题/软件市场/
    “中国人只能做MIS软件吗?有兴趣合作“通用软件“吗?开发模式可以学习Linux”(ShipDrink)内核已经写好,非常干净,原码公开

    70000行,其中50000行为手写,核心代码30000行
    (无注释)目前版本是1.5,经历了1.0,1.1,1.2,1.4等
    版本,其中1.1和1.5版本都曾作了极大改进,变化
    较大结构更加紧凑,编码更加合理,使用了部分
    COM原理但又不是COM,编译完,1.4版本为1.9M,
    1.5为900K,这从一个侧面反映了布局和编码的合理性。注:请对比一下
      Acrobat (正版2000元,我用得是正版)安装完为140M,
                但其核心代码为4.9M,
        Delphi6 (正版)安装完为600M,但其核心代码也仅为几兆,
      且编译程序中还包括大量资源(如位图,图标,对话框等)。),
    如果你你有开发热情,可以索要帮助文档,
    你可以为它升级。但你不会赚钱。
    因为赚钱的不是内核部分,