在下菜鸟,分数可怜,请大侠将就将就,请问各位大侠我在学习COM开发,在作客户端是遇到奇怪问题:Exception Class EOleSysError with

  • 主题发起人 主题发起人 gywlily
  • 开始时间 开始时间
G

gywlily

Unregistered / Unconfirmed
GUEST, unregistred user!
在下菜鸟,分数可怜,请大侠将就将就,请问各位大侠我在学习COM开发,在作客户端是遇到奇怪问题:Exception Class EOleSysError with Message '加载类型库/Dll出错'.急!!!!!!!!!我又重新建了进程外服务器, 编译时报错:RPC服务器不可用,这又是何问题 (20分)<br />在下菜鸟,分数可怜,请大侠将就将就, 指教一二,感激
请问各位大侠我在学习COM开发,在作客户端是遇到奇怪问题:
Exception Class EOleSysError with Message '加载类型库/Dll出错'
这是什么意思?
我又重新建了进程外服务器, 编译时报错:RPC服务器不可用
这又是何问题???????????????

 
能做COM了还是菜鸟呢?
我更菜,你提的问题一点不懂……
 
WARNING. Duplicate resource(s):
这个错误是你重复引用了 编译资源。比如你有一个abc.res的资源,但是你在工程文件里面的两个不同的地方引用了它({$R abc.res}),那么就会出现这个错误。

Type 10 (RCDATA), ID TFORM1:
这个好像提醒你,重复引用的资源是.dfm文件,注意每个form1.pas这样的文件里面都会有一句{$R *.dfm}的语句,估计是这个地方的问题。

File MemoClient.dfm resource kept;
最后一句可能是告诉你,重复引用了MemoClient.dfm资源。
 
to zqw0117, :
谢谢,我去掉了一个窗体文件的{$R *.dfm}就好了。
但是又有新问题:
Exception Class EOleSysError with Message '加载类型库/Dll出错'
请问这是怎么回事?
 
COM没连上或者客户端调用COM中的方法名称不匹配
 
可是我做的没问题阿 ,
请问应该从哪方面找原因?
 
&gt;&gt;Exception Class EOleSysError with Message '加载类型库/Dll出错'
你的客户端是不是运行在另外一个机器上?这个错误通常是因为你的类库dll文件没有在目标机器上注册。自己看看你用了哪些com对象,并找到它们所在的文件,看看客户机上是否也有,注意如果有还不能保证能运行,需要调用regsvr.exe进行注册才行,否则你无法创建com对象的!

还有,别忘了检查你的客户机上的dll版本是不是比你制作软件时引用的dll版本更底,如果是,也可能出现问题。
 
to zqw0117:
我做的是进程外服务器,不是DLL,并且也运行注册过了,
我的服务器和客户端在同一台机器上。
这之后,我又做了另外一个com服务器和另外的客户端测试,结果还是出现同样的问题。
以前做com并没有出现过这种问题。自从学习《delphi com深入编程》一书,就出现这种问题了,我快崩溃了!!!!!!
 
to gywlily,
把代码贴出来看看吧
 
我運行程序出現同樣的問題
//第一個單元
unit MyCom_TLB;

interface

const
mycommajorversion = 1;
mycomminorversion = 0;

IID_mycom : TGUID = '{DAA92574-286D-4D28-BC6B-20769779B1F2}';
Class_Mycom : TGUID = '{8155BAB5-9C79-491C-A557-A19368F4B494}';

Type
IMyCom = interface;
IMyComDisp = dispinterface;

MyCom = IMyCom;

IMyCom = interface(IDispatch)
['{DAA92574-286D-4D28-BC6B-20769779B1F2}']
function getname : string;safecall;
end;

IMyComDisp = dispinterface
['{DAA92574-286D-4D28-BC6B-20769779B1F2}']
function getname : string;dispid 201;
end;

coMyCom = class
class function Create : IMyCom;
class function CreateRemote(Const MachineName : string): IMyCom;
end;

implementation

uses ComObj;

class function coMyCom.Create : IMyCom;
begin
result := CreateComObject(Class_MyCom) as IMyCom;
end;

class function coMyCom.CreateRemote(Const MachineName : string) : IMyCom;
begin
result := CreateRemoteComObject(MachineName,Class_MyCom) as IMyCom;
end;

end.
//第二單元
unit interfacetoclass;

interface

uses
ComObj,MyCom_TLB;

type
TMyCom = class(TAutoObject,IMyCom)
protected
function getname : string;safecall;
end;

implementation

uses
ComServ;

function TMyCom.getname;
begin
result := 'great!!you are success!!';
end;

initialization
TAutoObjectFactory.Create(ComServer, TMyCom, Class_MyCom,
ciMultiInstance, tmsingle);

end.
//第三單元
program MyComDPR;

uses
Forms,dialogs,
MyCom_TLB in 'MyCom_TLB.pas',
interfacetoclass in 'interfacetoclass.pas';

{$R *.res}

type
TMyCom1 = class(TMyCom)
function getname :string;
end;

function TMyCom1.getname : string;
begin
result := 'just the first step!!';
end;

var MyCom1 : TMyCom1;
aa : string;

begin
Application.Initialize;
MyCom1 := TMyCom1.Create;
aa := MyCom1.getname;
showmessage(aa);
Application.Run;
end.

不知該怎么注冊,連要注冊什么都不知道,還請高手指點!!!我頂200分
200分
 
指點完了到http://www.delphibbs.com/delphibbs/dispq.asp?lid=2251906拿分
 
哇,
分很高了耶,
高手们快来呀,
硅谷就在眼前呀~~~~````
呵呵`~~~~~~~~~~~~~~~~~~~~~
 
我也遇到了类似的问题,
解决的方法很简单,

重建你的 COM 对象就可以了,
这一般是因为 源代码中的GUID和类型库中的不一致了
 
不行阿,我又重新建了进程外服务器, 编译时报错:RPC服务器不可用
这又是何问题???????????????
 
你有病毒防护程序吧,她把你的RPC当成病毒了,我的系统层出现这个问题
 
不会吧,我以前也是开着病毒监控,也没有出现这种问题
 
有没 有打冲击波病毒的补丁,如果中了这个病毒又没有打补丁,就会在调用COM组件时出错RPC服务器不可用的错误提示
 
请问哪儿有冲击波补丁下载,我试试!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部