我写的ActiveX的Dll,调用时报错:“对象不支持此属性或方法”,向大虾们请教 ( 积分: 200 )

  • 主题发起人 主题发起人 lili1
  • 开始时间 开始时间
L

lili1

Unregistered / Unconfirmed
GUEST, unregistred user!
我主要是想在这个Dll中包括一个类,这个类是提供给JSCript脚本使用的。
我是这样生成那个Dll的:
1.菜单File->New->Other->ActiveX->ActiveXLibrary
得到下面的代码:
library GRFunLib;
uses
ComServ,
GRFunLib_TLB in 'GRFunLib_TLB.pas',
Main in 'Main.pas' {GRClass: CoClass};
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
begin
end.
2.1.菜单File->New->Other->ActiveX->Automation Object
生成下面的代码:
unit Main;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj, ActiveX, GRFunLib_TLB, StdVcl,Dialogs,SysUtils;
type
//我在Delphi询问我类名称的时候填入了GRClass,结果自动生成这个类框架。
TGRClass = class(TAutoObject, IGRClass)
protected
{ Protected declarations }
function aaa:Integer;//这是我加入的函数。我主要是想调用这个函数。
end;
implementation
uses ComServ;
{ TGRClass }
function TGRClass.aaa:Integer;
begin
Result:=0;
end;
initialization
TAutoObjectFactory.Create(ComServer, TGRClass, Class_GRClass,
ciMultiInstance, tmApartment);
end.

接着我用regsvr32命令注册这个Dll.

最后我在Dll相同的目录下写了一个Test.js文件来调用这个Dll.
Test.js的内容为:

var fso;
fso = new ActiveXObject("GRFunLib.GRClass");
fso.aaa();

当我双击执行这个文件后Windows脚本宿主报错。

---------------------------
Windows 脚本宿主
---------------------------
脚本: F:/解释脚本/ActiveXDll/Test.js
行: 3
字符: 1
错误: 对象不支持此属性或方法
代码: 800A01B6
源: Microsoft JScript 运行时错误

---------------------------
确定
---------------------------

真是苦恼呀。
new ActiveXObject("GRFunLib.GRClass");这一句能执行成功。
但是就是调不出aaa这个函数。
请各位大虾帮忙呀。
 
我主要是想在这个Dll中包括一个类,这个类是提供给JSCript脚本使用的。
我是这样生成那个Dll的:
1.菜单File->New->Other->ActiveX->ActiveXLibrary
得到下面的代码:
library GRFunLib;
uses
ComServ,
GRFunLib_TLB in 'GRFunLib_TLB.pas',
Main in 'Main.pas' {GRClass: CoClass};
exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
{$R *.TLB}
{$R *.RES}
begin
end.
2.1.菜单File->New->Other->ActiveX->Automation Object
生成下面的代码:
unit Main;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj, ActiveX, GRFunLib_TLB, StdVcl,Dialogs,SysUtils;
type
//我在Delphi询问我类名称的时候填入了GRClass,结果自动生成这个类框架。
TGRClass = class(TAutoObject, IGRClass)
protected
{ Protected declarations }
function aaa:Integer;//这是我加入的函数。我主要是想调用这个函数。
end;
implementation
uses ComServ;
{ TGRClass }
function TGRClass.aaa:Integer;
begin
Result:=0;
end;
initialization
TAutoObjectFactory.Create(ComServer, TGRClass, Class_GRClass,
ciMultiInstance, tmApartment);
end.

接着我用regsvr32命令注册这个Dll.

最后我在Dll相同的目录下写了一个Test.js文件来调用这个Dll.
Test.js的内容为:

var fso;
fso = new ActiveXObject("GRFunLib.GRClass");
fso.aaa();

当我双击执行这个文件后Windows脚本宿主报错。

---------------------------
Windows 脚本宿主
---------------------------
脚本: F:/解释脚本/ActiveXDll/Test.js
行: 3
字符: 1
错误: 对象不支持此属性或方法
代码: 800A01B6
源: Microsoft JScript 运行时错误

---------------------------
确定
---------------------------

真是苦恼呀。
new ActiveXObject("GRFunLib.GRClass");这一句能执行成功。
但是就是调不出aaa这个函数。
请各位大虾帮忙呀。
 
首先查阅 IGRClass 中有没有 function aaa:Integer 这个方法。
1。如果你是自己手工加的,要在 IGRClass中加入 访问方法
IGRClass 接口在工程的 (ProjectName)_LIB.pas 中。
------------
2。利用Delphi的 Type Library 类型库管理器处理。
 
IGRClass接口包含 aaa 方法吗,贴出你的.tlb文件。
 
dll生成用你的方法,
引用(for delphi)
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
GRFunLib_TLB in 'C:/Documents and Settings/Administrator/桌面/1/GRFunLib_TLB.pas';

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Comobj, GRFunLib_TLB;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
GRClass : IGRClass;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
GRClass := CreateComObject(CLASS_GRClass) as IGRClass;
Button1.Caption:= inttostr(GRClass.aaa);

end;

end.
 
谢谢鳄鱼先生和xeen,在你们的指点下。
我已经把问题解决了。
那个aaa是我手工加上去的。所以不行。
原来在IGRClass加了过程以后,会自动生成过程框架的呀。
谢谢。
 
后退
顶部