• 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接口类中实现"友元"关系?

如何在COM接口类中实现"友元"关系?

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

佚名通过本文主要向大家介绍了 如何在COM接口类中实现"友元"关系?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何在COM接口类中实现"友元"关系?
描述:

各位高手:
   程序员对"友元"一般都不会陌生,但是我在用ATL编写COM程序时
遇到一个难题,就是不知如何使接口类的某些接口函数只能让部分
接口类访问,就是类似"友元"的关系。


解决方案1:

其实解决这个问题的难易全在于你对于"规范"、"通用"的偏执程度。
我也遇到过这个问题,我的第一反应是查一下COM里有没有现成的方案,没有,于是信心十足的想自已创造一个Pattern,可以成为类似问题的通用而又规范解决方案。于是我埋头设计,开始创造了"友元接口"这个概念,后来又想到用"认证调用"的方法,还设计过一种最复杂的回调接口机制。在设计的过程中,我把调用这个COM组件的客户假想成这个COM组件的"敌人","敌人"会用各种办法绕过你的"防御",所以你要不断推翻自己的想法,强化你的"防御"。我越来越觉得客户是丑陋、无耻的,它会破坏一切正常秩序来调用它不该看到的方法。最后我精疲力尽了,我被自己折磨得快疯了。我不禁怀疑的问自己,"真的需要吗?","不需要吗?""需要吗?","不需要吗?"... ... 最后,我冷静的做了一次分析:这个COM,除了我的一位同事会调用外再也不会有人需要它了,它更不可能成为一个广为流行的COM,它只是在这套系统里扮演着一个普通的角色,并且谁也不能保证它能"活"多久,也许这套系统的下一个版本已经变成J2EE的了。客户端和COM都是用VC写的,源码也都在,没必要考虑其它语言调用。于是我确定了两个方案,一:在文档里写上"不要调用";二:像上面提到的,另分出一个接口,不公布在类型库中,只提供一个头文件;第一种方案跟本不在用程序解决的范畴之内,第二种也是在语言的范畴内解决的,不设计跨语言的COM层次。
    你猜我是怎么解决的?
    我和正在专心写代码的同事说,这个接口的某某方法你不要调用,那是设计给其它人用的。他心不在焉地说"知道了"。事情就这样解决了,我连文档都没改。
    我想说的是,规范固然重要,它也代表一个程序员的素质,但有时解决问题不要死钻牛角尖,要从实际出发、灵活处理、克服偏执的心理,做一个理智的程序员。

解决方案2:

访问权限限定,1访问设定,是通过Dcomcnfg设置完成
2进程设定,通过编程修改Proxy/Sub来完成,你可以查一下代理/存根获取接口
信息的那个接口,好像是什么 Get Client Blanket进程级别的验证在com规范
中是通过修改这个

解决方案3:

我觉得也没什么好的方法,照 LOP5712(LOP)说的去做,应该会避免一些问题,尽量去遵照COM的规范。

解决方案4:

“友元”是对封装性的破坏。COM是封装得比较严格的。
不建议在C++中使用友元,更。。。。。。

解决方案5:

在接口上做身份验证行不行?

解决方案6:

C++的友员只是语言级上的保护,不过COM规范本身并没有提供这方面的功能,不过可以使用此法,将不止是语言级的保护
其实很简单,将你想让友员类访问的方法单独归成一个接口,这个接口的规格只有你的友员客户才知道,也就实现友员效果了


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

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

相关文章

  • 2017-06-05 ActiveX控件能否获取其在容器里的信息?
  • 2017-06-04 com中多线程问题
  • 2017-06-05 如用同一个线程函数创建10个线程如何给每个线程分配不同的任务?
  • 2017-06-04 ATL对话框中使用文本编辑框控件的问题?急
  • 2017-06-04 WTL属性页对话框
  • 2017-06-05 DLL转EXE
  • 2017-06-05 怎样在启动一个程序的时候先启动自己的一个程序,然后才允许该程序启动就你有的病毒感染一样?
  • 2017-06-04 跟踪不到MSN对话框中窗体按钮的类名
  • 2017-06-04 BSTR怎么转换成char?
  • 2017-06-05 请问C#读取内存中的中文后,怎么处理成为UNICODE码?

文章分类

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

最近更新的内容

    • 请问怎样讲C编写的DLL加到VC程序中
    • 选用UDP还是TCP
    • 打印程序的字符位置怎么确定
    • 求救,怎样在mfc中定位到word的书签,请给出具体代码,在线等
    • windows升级接口错误
    • evc与dll
    • 自由线程调用问题
    • 如何仅获取消息,但不截取?
    • CreateThread之后,线程并没有执行,为何?
    • 请教ATL中使用ADO的问题!请大家帮助

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

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