关于COM+一个很基本的问题,提问纯粹是为了散分(100分)

  • 主题发起人 主题发起人 stargazer
  • 开始时间 开始时间
S

stargazer

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近对COM+比较感兴趣,于是动手写了一个演示性的例程。不料甫一起步就遇到了障碍。情况是酱子的:
按照书上所言,偶先建立一个ActiveX Library项目,然后加入一个Transcational Object,创建一个COM+组件。
分发时,偶没有使用菜单中的Install COM+ Object,而是将该动态库拷贝到另外一台Windows2000 Advance Server计算机下面,利用操作系统的“组件服务”安装这个COM+组件。
OK,然后偶开始写客户端。
uses了Tlb文件生成的.pas文件后,偶定义了一个指定接口类型的变量,在主窗体创建时调用CreateRemote方法远程激活COM+组建。
问题来了。该语句执行后,客户端弹出提示“Interface not supported”。
下面是我采取的一些步骤:
1,首先把客户端编译后放在和COM+组件同一台计算机上,运行。没有报错
2,降低COM+的安全配置,在其它计算机上调用,依然报告同样错误。
3,单步运行客户端代码,观察组件行为,从“组建服务”窗口中看到组件已经激活
4,单步跟踪客户端代码,发现CoCreateInstanceEx是成功的,就是接口转换时出错,这部分VCL代码是Borland用汇编写的,分析的结果是调用接口的QueryInterface时报错。
偶暂时黔驴技穷了,请各位高手看看。谢谢
 
提问纯粹是为了散分?送点给我
 
问问,你客户端用的是什么组件连接服务器的 :)
 
to 阿西喊佛
没用任何组件,所以才纳闷啊。
 
下面是整个客户端的全部代码:
unit mainform;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, LoginSrvc_TLB;//LoginSrvc_TLB 就是服务器tlb的wrapper文件
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
fIMyVar:ILoginSvr;//接口
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
fIMyVar:=CoLoginSvr.CreateRemote('192.168.1.155');//这一句运行后出错
end;

end.
 
呵呵,如果你用组件,你会发现,当连接到server时,会多一个serverguid。
拿webconnect举例子,若你设置好url后,然后选择servername,就会出现一个serverguid
若没有这些先前条件,呵呵……
若是你自己定义的变量(我没试过),你也可以参照以上的步骤实施,看能否行~
若不可以,你再看看手动加上serverguid是否能通过~
 
找到原因了,真真是气死我了。
 
哦,说说 :)
 
我也遇到过,不过对于楼上的用组件要没置serverguid不理解,他不是只提供了CreateRemote吗?况且ServerGuid在tlb.pas中已经定义成常量了
关注楼主的解决方法![:D]
 
现在太忙了,有空我一定写一写。[:D]
 
说来好笑,是我引用的tlb外套文件(wrapper file)不对。
客户端引用的tlb外套应该用IDE中主菜单-Project-Import Type Liberary...功能生成的那个,而我偷懒,直接引用了设计tlb时生成的那个,结果就错误了。
不过,还有一个比较难的问题,过几天我再开贴问大家,呵呵。
 
你要把fIMyVar定义成ILoginSvrDisp借口,实例化时用createremotecomobject方法,就不用tlb注册了
 
设计期的tlb为什么不行,应该可以的,只要在客户端注册那个tlb文件就可以了
 
to homesick,
那么我是不是在发布软件的时候还要在客户端注册tlb文件啊?那多麻烦呀。
 
对com我一知半解,正好可以学习学习
 
关注一下
这和DCOM配置是不是一样的麻烦
 
to stargazer
发布软件的时候很简单,用com+的导出向导生成客户断安装包,
执行一下就行了.
 
多人接受答案了。
 
后退
顶部