首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
VC/MFC
ATL/ActiveX/COM
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
如何将COM+组件的接口方法设置为只能被COM+应用程序内部使用?
[已结贴,结贴人:horris]
加为好友
发送私信
在线聊天
horris
僧推月下门
等级:
发表于:
2008-06-04 01:24:59
楼主
问题是这样的,我有一个COM+应用程序,假设为SVR,内有三个组件A,B,C,其中C有一个接口的方法为Method。现在我想让Method只能被COM+应用程序SVR的内部调用,也就是说只有A,B才能调用Method,而客户端不能直接调用。就象COM+ 1.5中的“使组件专用于应用程序”的效果一样,只不过那个是作用于整个组件的,而我想让一个方法也专用于应用程序。我想过用一个没有配置任何Windows用户的角色来实现,但因为这样的内部方法有不少,而且还需要COM+管理员参与,所以不想通过角色,而通过编程来实现。
问题点数:
100
回复次数:
10
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
CathySun118
失.悟
等级:
发表于:
2008-06-04 08:26:49
1
楼 得分:
0
这个问题有水平,关注
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
发表于:
2008-06-04 09:07:20
2
楼 得分:
0
试试在组件线程中实现IMessageFilter,能获取调用者信息。不过我不确定是否适用于COM+
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yxz_lp
平乐无忧
等级:
发表于:
2008-06-04 09:08:38
3
楼 得分:
0
把C实现为不可创建类(OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO),不知可否。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jiqing_gao
gaof
等级:
发表于:
2008-06-04 09:14:34
4
楼 得分:
0
关注
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
horris
僧推月下门
等级:
发表于:
2008-06-05 00:03:05
5
楼 得分:
0
引用 3 楼 yxz_lp 的回复:
把C实现为不可创建类(OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO),不知可否。
这样我的COM+应用程序内部不也调用不了了?而且你的方法是使整个组件都不可用,我想要的是使某个方法对客户端不可用,但对COM+应用程序的其他组件是可用的。
谢谢各位的回复,期待精彩的思路。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ukyoking
累
等级:
发表于:
2008-06-05 08:37:39
6
楼 得分:
40
我有一个想法供楼主参考,用代码描述如下,不知道是不是馊主意。
interface ISupportC : public IUnknown
{
HRESULT CanbeCall(BSTR strValue);
}
ClassA : public IUnknown,
public YourInterface,
public ISupportC
{
}
ClassC : ....
{
HRESULT Method(Your Param...., IUnknown *pCaller)
{
CComPtr <ISupportC> spISC;
HRESULT hr = pCaller->QueryInterface(&spISC);
if (SUCCEEDED(hr))
{
spISC->CanbeCall(....); //这里做一些必要的验证,防止别人派生ISupportC
}
}
}
以下是调用
ClassA a;
ClassC c;
c.Method(..., &a);
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jiangsheng
蒋晟
等级:
发表于:
2008-06-05 12:08:52
7
楼 得分:
20
你可以约一个暗号,对上之后才进行正常的操作
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
发表于:
2008-06-05 14:35:37
8
楼 得分:
40
引用 7 楼 jiangsheng 的回复:
你可以约一个暗号,对上之后才进行正常的操作
应该不可行。由于是COM+环境,暗号机制也应该是公开的。
另辟其它私密的通信渠道算了,比如SOCKET
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hoboo
hoboo
等级:
发表于:
2008-06-05 16:34:55
9
楼 得分:
0
是不是和这个问题类似。http://topic.csdn.net/u/20080605/10/5a0daf6d-af71-4b5a-b7f1-67d42834642c.html
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
horris
僧推月下门
等级:
发表于:
2008-06-06 00:38:57
10
楼 得分:
0
ukyoking和jameshooo的想法有点用。
我已在MSDN Forum上得到了一个比较理想的解决方案:
You can use the 'local' attribute in MIDL. [local] will mean that the interface can never be marshaled, and callable only within the same process space, your COM+ application.
感谢各位的回贴!
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友