• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > COM调用成功,DCOM调用失败,请大虾指点迷津

COM调用成功,DCOM调用失败,请大虾指点迷津

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了dcom是什么,9955dcom最近十天更新,8844dcom更新后地址,dcom配置,9955dcom首页等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: COM调用成功,DCOM调用失败,请大虾指点迷津
描述:

小弟最近在学习COM,费九牛二虎之力知道了点老虎皮毛。昨天在做DCOM时又遇到拦路虎,请各位大虾帮忙。
    工程类型Service (Exe)类型,我在其中加了一个接口IGetHost,为改接口添加了一个方法GetComputerName(BSTR* bs)。我用CoCreateInstance能调用成功,显示了"soft5"---我的计算机名,COM调用成功。用CreateInstanceEx调用则每次都不能成功创建实例(我已经注册了代理存根,在DCOMCNFG中设置了身份验证为“无”,设置了“在此计算机上运行”和“在以下计算机上运行192.168.0.5”),DCOM调用失败。
    COM调用的代码省略了,以下是DCOM客户端调用的代码:
    我在stdafx.h文件中定义了 _WIN32_DCOM
    #define _WIN32_DCOM
    COM服务器接口是这样的:
接口:IGetHost
方法:GetComputerName(BSTR* bs);//得到主机名称
    调用DCOM的代码是这样的:
HRESULT hr;
hr=CoInitializeEx(NULL,COINIT_MULTITHREADED);
if(FAILED(hr))
{
MessageBox(_T("CoInitializeEx Failed"));
return ;
}
    // hr=CoInitializeSecurity(NULL,-   1,NULL,NULL,RPC_C_AUTHN_LEVEL_NONE,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);
COAUTHINFO info;
COSERVERINFO cs;
memset(&info,0,sizeof(info));
memset(&cs,0,sizeof(cs));
cs.dwReserved1=0;
cs.dwReserved2=0;
cs.pAuthInfo=&info;
cs.pwszName=LPWSTR("192.168.0.5");//远程计算机
MULTI_QI qi[1];
memset(&(qi[0]),0,sizeof(qi[0]));
qi[0].pIID=&IID_IGetHost;
CoCreateInstanceEx(CLSID_GetHost,NULL,CLSCTX_SERVER,&cs,1,qi);
hr=qi[0].hr;
if(FAILED(hr))
{
MessageBox(_T("CoCreateInstanceEx Failed"));//每次都执行到这里,也就是失败了
CoUninitialize();
return ;
}
IGetHost *pI=NULL;
pI=(IGetHost*)qi[0].pItf;
BSTR bs;
hr=pI->GetComputerName(&bs);
if(FAILED(hr))
{
pI->Release();
CoUninitialize();
return;
}
_bstr_t str(bs);
MessageBox((LPCTSTR)str);
pI->Release();
CoUninitialize();
return;
另外,那位大虾有时间发给小弟一个简单的DCOM程序供小弟学习之用,不胜感激!邮箱:entaoyang@163.com


解决方案1:

void CServiceModule::Run()
{
    _Module.dwThreadID = GetCurrentThreadId();
    //This means that calls come in on a random RPC thread
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    // This provides a NULL DACL which will allow access to everyone.
    hr = CoInitializeSecurity( 0, -1, 0, 0, 
         RPC_C_AUTHN_LEVEL_NONE, 
         RPC_C_IMP_LEVEL_IDENTIFY, 0, 0, 0 );
    hr = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER | 
         CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE);

解决方案2:

关于com的讨论,我建了一个群9461821,欢迎加入

解决方案3:

谁说DCOM要被淘汰了,当前的技术发展眼花缭乱,不要被冲昏了头。今天出了个.net框架,立马就转向.net,明天出了个G#,又改用G#。对于我们从事技术工作的IT人来说,没有什么过时的技术。我现在回过头还在搞8086和80386保护模式编程呢。COM/DCOM是windows的核心,如果掌握好了,对于你理解操作系统业务流程非常有帮助的。.net框架其实还是搭建在windows的COM/DCOM之上的,他现在摆脱不了COM/DCOM,除非出新的操作系统;COM是一种中间件技术,采用了CORBAR中的很多思想,很值得学习。这并不是说我们不要去学习最新的技术,而是在学习新技术的同时,要知道为什么会有这种技术出现,他跟以前技术之间的关系以及它们之间的过渡等等。说得太多了,脱离了搂主的话题,只是想借此批判那些过于浮躁的人。

解决方案4:

http://www.codeproject.com/com/clientserverwithdcom.asp
这个因该对你有帮助。

解决方案5:

两台电脑在同一个域(domain)或信任的域里才会成功,具体原因不清楚。

解决方案6:

^_^,前两天刚化大力气搞定了DCOM配置。
收集资料如下:
http://community.csdn.net/Expert/topic/3659/3659650.xml?temp=.5582392
http://www.livejournal.com/users/hanson2010/103257.html
http://program.tommsoft.com/bbs/reannounce.asp?boardid=3&rootid=15709&id=15710&reply=true
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1156
http://www.cnblogs.com/77543/archive/2005/01/12/90915.html
http://www.sou3w.com/database13/database225554.htm
http://community.csdn.net/Expert/topic/3659/3659650.xml?temp=.5582392
此外,把错误返回的值到MSDN里查查,到底是什么问题引起的。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • DCOM中的多串口通讯
  • ★★★关于DCom服务器★★★
  • net中调用dcom对象如何释放
  • 问:不同网段之间可以使用DCOM通讯么?500分
  • DCOM如何走Internet?
  • dcom的问题
  • dcom的问题
  • 请问dcom能够实现这样的问题吗分不够另外给分
  • 一个比较朦胧的问题com/dcom/com+问题,朋友门都来看看
  • Dcom传人输出型字符串的问题!

相关文章

  • 2017-06-05 COM接口重载
  • 2017-06-05 静态链接库中是不是就没有导出函数的概念了?
  • 2017-06-05 求助:菜鸟,学了点C++,想学com,但是网络上的资料太少了,求过来人指点
  • 2017-06-04 连接点问题?如果客户端响应事件时死掉或时间太长,怎么办?
  • 2017-06-04 100分求教:如何在ATL中响应Word打开事件??
  • 2017-06-04 GUID,CLSID,PROGID之间的关系?
  • 2017-06-04 COM工具?
  • 2017-06-05 如何枚举当前系统的所有进程(高手指点)
  • 2017-06-04 MfcActivex有窗体,在activexcontroltest中显示正常,在拖放中无法显示
  • 2017-06-04 dllcomponentsurrogate远程无法运行?(H

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 新用ATL做的ActiveX控件属性页的问题求助
    • ATL开发ActiveX控件注册问题
    • 请问如何用函数实现资源管理器explorerexe进程的刷新F5功能???
    • C++实现文件透明加密
    • 高手,请进问题第三次提出
    • 问一个钩子问题!
    • question
    • StartServiceCtrlDispatcher()函数失败
    • 给word做插件的问题,关于word的侧边栏
    • 高分相赠--如何测试线程死锁?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有