请问大家,我在用COM出现加载类型库/dll时出错(EOLESysError异常),是什么原因? (50分)

  • 主题发起人 majorsoft
  • 开始时间
M

majorsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
刚涉及COM,请多多指教
 
很有可能是 Com 组件没注册.
 
我注册了呀。
 
问题还不甚明了。:)
确保自己写的COM没有问题?
 
com 注册成功了,客户端程序编译也通过了,但就是在运行到
initialization
TTypedComObjectFactory.Create(ComServer, TMaComStrServer, Class_MaComStrServer,
ciMultiInstance, tmApartment);
是就出了这个异常。
要不我把全部程序贴上来。
 
com和接口定义的文件:
unit Unit2;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj, Project1_TLB, StdVcl;
const
Class_MaComStrServer:TGUID='{55450001-39E0-4532-9A35-16A906374849}';
type
IMaComStrServer=interface(IUnknown)
['{2AD548D4-948E-4334-AB03-71A9127D3995}']
function GetValue():string;stdcall;
procedure SetValue(const value:string);stdcall;
function UpperCase1():string;stdcall;
function LowerCase1():string;stdcall;
property Text:string read GetValue write SetValue;
end;

TMaComStrServer = class(TTypedComObject, IMaComStrServer)
private
FText:string;
protected
{Declare IMaComStrServer methods here}
public
function GetValue():string;virtual;stdcall;
procedure SetValue(const value:string);virtual;stdcall;
function UpperCase1():string;virtual;stdcall;
function LowerCase1():string;virtual;stdcall;
property Text:string read GetValue write SetValue;
end;

implementation
uses ComServ,SysUtils;
{ TMaComStrServer }
function TMaComStrServer.GetValue: string;
begin
result:=FText;
end;

function TMaComStrServer.LowerCase1: string;
begin
result:=LowerCase(FText);
end;

procedure TMaComStrServer.SetValue(const value: string);
begin
FText:=value;
end;

function TMaComStrServer.UpperCase1: string;
begin
result:=UpperCase(FText);
end;

initialization
TTypedComObjectFactory.Create(ComServer, TMaComStrServer, Class_MaComStrServer,ciMultiInstance, tmApartment);//运行时出错,抛出那个异常
end.
///***************客户端程序***************/
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,unit2,ComObj;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
iStrSvr1,istrSvr2:IMaComStrServer;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
iStrSvr1:=CreateComObject(class_MaComStrServer) as IMaComStrServer;
iStrSvr1.Text:='';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
iStrSvr1.Text:=edit1.Text;
edit2.Text:=iStrSvr1.UpperCase1();
end;

end.

 
这个问题困饶了我很久,希望前辈们指点一下
 
我也遇到过,请高手指点
 
我觉得从代码上看是没有问题的,我在win2k advanced server+delphi7调试
 
跟你的用户身份环境有没有关系啊?
你用管理员身份,注册,然后再运行客户端试试。
 
参数怎么都是string而不是widestring?是不是你自己改过了?
 
to softdog
参数怎么都是string而不是widestring?是不是你自己改过了?
这个有关系吗??
 
我是用管理员登陆的
 
呵,,直接写COM 我还没有怎么用过,都写的是 OLE Automation
一直没有问题,,,
我试了一把好像也是有这样的问题哦。。!
不过我的是“ interface not support.“
 
你可以把源代码发到我的email,我帮你调试一下!
不过本人的水平也很菜.....
feifan731@163.net
 
问题解决了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部