+ -
当前位置:首页 → 问答吧 → JS调用DELPHI函数问题。蛋疼了两周!!!

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

时间:2011-10-29

来源:互联网

程序写好后,在我的电脑上面没有出现任何问题,在同事电脑上面也没任何问题。

当用户使用的时候,就有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接口定义如下:


Delphi(Pascal) code


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.





Delphi(Pascal) code


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.





作者: ltysunde   发布时间: 2011-10-29

有知道的朋友,帮提供下思路。小弟不知从何下手。是什么可能引发的血案?

作者: ltysunde   发布时间: 2011-10-29

顶下。。

作者: ltysunde   发布时间: 2011-10-29