程序写好后,在我的电脑上面没有出现任何问题,在同事电脑上面也没任何问题。当用户使用的时候,就有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接口定义如下:
interfaceuses 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;implementationuses ComObj;end.
unit UMyExternal;interfaceuses
  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;implementationuses
  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.

解决方案 »

  1.   

    你不能直接用JS来接收DELPHI函数返回值,应该在你的接口中定义一个属性,然后你的JS调用delphi函数后在函数中设置这个属性值,你再在JS中取这个属性的值就可以了
      

  2.   

    是不是使用的IE不同,或者dll未注冊做一个简单测试,用alter看看有没有内容,dll应该是一个com组件
    var obj=new ActoveXObject("com名称");
    alter(obj.gockpack());后面toString()不须要
      

  3.   

    如果你的代码没问题的话,很可能在别的电脑上少OCX需要的库了,比如你OCX用了别的的DLL
      

  4.   

    我没有OCX,或是DLL。是直接写在EXE中的。