JS调用DELPHI函数问题。蛋疼了两周!!!

ltysunde 2011-10-29 06:30:36
程序写好后,在我的电脑上面没有出现任何问题,在同事电脑上面也没任何问题。

当用户使用的时候,就有N个用户出现相同的问题了。

错误如下:
=========================================
行:110
字符:2
错误:意外的调用了方法或属性访问
代码:0
URL :res://Prores.dll/INDEX
=========================================

找到JS中第110行代码如下:
function getpack() {
var packs ="";
packs = external.gockpack().toString(); <==========这是110行.
return packs;
}

这行正是调用我DELPHI中的函数gockpack这个。

可是在我的电脑上面并不会出现这类情况。请问出现这类情况会是什么原因造成的。

DELPHI接口定义如下:




interface

uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;


// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:
// Type Libraries : LIBID_xxxx
// CoClasses : CLASS_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces: IID_xxxx
// *********************************************************************//
const
// TypeLibrary Major and minor versions
MaxPackMajorVersion = 1;
MaxPackMinorVersion = 0;

LIBID_MaxPack: TGUID = '{517F7078-5E73-4E5A-B8A2-8F0FF14EF21B}';

IID_IMyExternal: TGUID = '{4F995D09-CF9E-4042-993E-C71A8AED661E}';
type

// *********************************************************************//
// Forward declaration of types defined in TypeLibrary
// *********************************************************************//
IMyExternal = interface;
IMyExternalDisp = dispinterface;

// *********************************************************************//
// Interface: IMyExternal
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {4F995D09-CF9E-4042-993E-C71A8AED661E}
// *********************************************************************//
IMyExternal = interface(IDispatch)
['{4F995D09-CF9E-4042-993E-C71A8AED661E}']
function gockpack: WideString; safecall;
function vcldestr(const pbstr: WideString; const tpstr: WideString): WideString; safecall;
end;

// *********************************************************************//
// DispIntf: IMyExternalDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {4F995D09-CF9E-4042-993E-C71A8AED661E}
// *********************************************************************//
IMyExternalDisp = dispinterface
['{4F995D09-CF9E-4042-993E-C71A8AED661E}']
function gockpack: WideString; dispid 201;
function vcldestr(const pbstr: WideString; const tpstr: WideString): WideString; dispid 202;
end;

implementation

uses ComObj;

end.






unit UMyExternal;

interface

uses
windows,Classes, ComObj, MaxPack_TLB,funs,EncdDecd;

type

TMyExternal = class(TAutoIntfObject, IMyExternal, IDispatch)
private
// fData: TStringList; // info from data file
protected
{ IMyExternal methods }

public
function gockpack: WideString; safecall;
constructor Create;
destructor Destroy; override;
end;

implementation

uses
SysUtils, ActiveX, StdActns;

{ TMyExternal }

constructor TMyExternal.Create;
var
TypeLib: ITypeLib; // type library information
begin
inherited Create(TypeLib, IMyExternal);
end;

destructor TMyExternal.Destroy;
begin
//fData.Free;
inherited;
end;

function TMyExternal.gockpack: WideString;
begin
result :='test';
end;
end.




...全文
331 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltysunde 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wzwcn 的回复:]
如果你的代码没问题的话,很可能在别的电脑上少OCX需要的库了,比如你OCX用了别的的DLL
[/Quote]

代码确实没问题,在公司里电脑上面都没有遇到这样的问题。

其它用户电脑上面,就有一些会出现。看来是用户电脑上面少了些文件。猜想是这样的。
但是缺少什么文件呢?????
ltysunde 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wzwcn 的回复:]
如果你的代码没问题的话,很可能在别的电脑上少OCX需要的库了,比如你OCX用了别的的DLL
[/Quote]

代码确实没问题,在公司里电脑上面都没有遇到这样的问题。

其它用户电脑上面,就有一些会出现。看来是用户电脑上面少了些文件。猜想是这样的。
但是缺少什么文件呢?????
wzwcn 2011-11-02
  • 打赏
  • 举报
回复
如果你的代码没问题的话,很可能在别的电脑上少OCX需要的库了,比如你OCX用了别的的DLL
kaikai_kk 2011-11-02
  • 打赏
  • 举报
回复
写错了,是alert
kaikai_kk 2011-11-02
  • 打赏
  • 举报
回复
是不是使用的IE不同,或者dll未注冊

做一个简单测试,用alter看看有没有内容,dll应该是一个com组件
var obj=new ActoveXObject("com名称");
alter(obj.gockpack());

后面toString()不须要



ltysunde 2011-11-02
  • 打赏
  • 举报
回复
我没有OCX,或是DLL。是直接写在EXE中的。
OO_is_just_P 2011-11-02
  • 打赏
  • 举报
回复
这个咱还真没整过。尤其是JS更是不会。只能帮顶。
likeyrain 2011-11-01
  • 打赏
  • 举报
回复
插件没注册
ltysunde 2011-11-01
  • 打赏
  • 举报
回复
能详细说明一下吗?
为什么在我们同事的电脑上面是可以的。

lt2000 2011-10-30
  • 打赏
  • 举报
回复
你不能直接用JS来接收DELPHI函数返回值,应该在你的接口中定义一个属性,然后你的JS调用delphi函数后在函数中设置这个属性值,你再在JS中取这个属性的值就可以了
ltysunde 2011-10-30
  • 打赏
  • 举报
回复
希望遇到相同问题的朋友帮指点一下。谢谢咯。。
ltysunde 2011-10-29
  • 打赏
  • 举报
回复
顶下。。
ltysunde 2011-10-29
  • 打赏
  • 举报
回复
有知道的朋友,帮提供下思路。小弟不知从何下手。是什么可能引发的血案?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧