和Delphi完全相同的方法,为什么BCB建立的"COM+"组件不能被客户端调用?(300分)

  • 主题发起人 主题发起人 op
  • 开始时间 开始时间
O

op

Unregistered / Unconfirmed
GUEST, unregistred user!

|----|--------------------------------------------------------|
| | 1.新建ActiveX Library |
| | 2.新建Transactional Object |
| 服 | CoClass Name: Demo |
| | Threading Model: Apartment |
| | Transaction model: Supports transactons |
| 务 | 3.新建IDemo接口下的方法Test |
| | HRESULT Test(long* b) { *b=88;
return S_OK;} |
| | 4.编辑成DLL |
| 端 | 5.Install COM+ Objects…… |
| | 6.在Win2000的"组件服务"中为这个COM+组件加入角色和权限。|
| | |
|----|--------------------------------------------------------|
| 客 | |
| 户 | 调用这个组件的Test方法,看返回值是不是88; |
| 端 | |
|----|--------------------------------------------------------|
以上方法,
服务端用Delphi做
由Delphi和BCB做的客户端"都调用成功",返回值88。

服务端用BCB做
由Delphi和BCB做的客户端"都调用不成功"(组件对象Create成功,但调用Test失败)
以上实验表明,问题肯定出在服务端。
可这是个超级简单的服务端程序,
99%都是用Wizard做的,代码部分只实现了Test函数,
为什么用BCB建的COM+组件,客户端不能用???
另注:如果这个组件不是安装在COM+环境中,而是以一般的COM方式注册,那一切就正常。
 
你调试一下你的COM+对象不就知道了。
你不会再有我告诉你怎么调试吧?
 
奇怪,调试也有问题。
1.在"组件服务"中选中"调试"选项,
调试器路径为:d:/Borland/Delphi5/Bin/bordbg50.exe dllhost.exe /ProcessID:{9119B504-4916-4CB6-8D2E-1549BD965598}
2.用Delphi打开那个COM+组件,在Run Parameters里设置如下:
HostApplication为:C:/WINNT/System32/dllhost.exe
Parameters为:/ProcessID:{9119B504-4916-4CB6-8D2E-1549BD965598}
3.在Test函数中设置断点。
4.运行客户端程序。
上面是用一个那个"调用成功的COM+组件"做的。
结果客户端程序调用成功,显示88,可Delphi却没有断点成功。??????
请教Hongjiang兄,问题可能出在哪?
注:我的这个应用程序包里有两个COM+组件,一个是Delphi做的,一个是BCB做的。
还有,/ProcessID后面的GUID是应用程序包的ID,应该没问题吧?
 
你的调试参数是对的.
你要先将你的COM+ Apolication Shutdown, 然后
在Delphi中设好断点,并执行你的服务程序, 之后
再运行你的客户端程序.
 
op:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
多人接受答案了。
 
后退
顶部