我在做舒特刷卡机的二次开发时,使用CRCLAN.ocx控件开发是,在delphi7 IDE环境运行时的,但刷卡到10~11次时出现
Project Project1.exe raised exception class EInOutError with message 'Invalid filename' 错误,请各位大拿帮忙解决,谢谢!救命啊!贴出代码:
unit CRCLAN_TLB;
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
interfaceuses Windows, ActiveX, Classes, Graphics, OleCtrls, OleServer, StdVCL, Variants;const
  // TypeLibrary Major and minor versions
  CRCLANMajorVersion = 1;
  CRCLANMinorVersion = 0;  LIBID_CRCLAN: TGUID = '{761242A6-D3D1-4DFB-A65A-E4BE26E38CDB}';  IID_ICRCLANX: TGUID = '{CED842A8-F840-4759-A2E5-DCD3BAEB70D4}';
  DIID_ICRCLANXEvents: TGUID = '{8D163ADE-DCE7-4494-9089-DA7C001E9384}';
  CLASS_CRCLANX: TGUID = '{B0BA1D0B-7D4B-4E0C-953B-F687AF9207D0}';
type
  ICRCLANX = interface;
  ICRCLANXDisp = dispinterface;
  ICRCLANXEvents = dispinterface;  CRCLANX = ICRCLANX;  ICRCLANX = interface(IDispatch)
    ['{CED842A8-F840-4759-A2E5-DCD3BAEB70D4}']
    //省略
  end;
  ICRCLANXDisp = dispinterface
    ['{CED842A8-F840-4759-A2E5-DCD3BAEB70D4}']
    //省略
  end;
  ICRCLANXEvents = dispinterface
    ['{8D163ADE-DCE7-4494-9089-DA7C001E9384}']
    
  end;    TCRCLANX = class(TOleControl)
  private
    FOnConnect: TCRCLANXOnConnect;
    FOnDisconnect: TCRCLANXOnDisconnect;
    FOnConsume: TCRCLANXOnConsume;
    FOnSuccess: TCRCLANXOnSuccess;
    FOnError: TCRCLANXOnError;
    FOnApplyCorrect: TCRCLANXOnApplyCorrect;
    FOnQueryBalance: TCRCLANXOnQueryBalance;
    FOnDeposit: TCRCLANXOnDeposit;
    FOnFailure: TCRCLANXOnFailure;
    FOnQueryWare: TCRCLANXOnQueryWare;
    FOnCorrect: TCRCLANXOnCorrect;
    FOnChangePassword: TCRCLANXOnChangePassword;
    FOnApplySubsidy: TCRCLANXOnApplySubsidy;
    FOnChangeCardState: TCRCLANXOnChangeCardState;
    FOnWithdrawal: TCRCLANXOnWithdrawal;
    FOnTransferring: TCRCLANXOnTransferring;
    FIntf: ICRCLANX;
    function  GetControlInterface: ICRCLANX;
  protected
    procedure CreateControl;
    procedure InitControlData; override;
  public
    function Open: WordBool;
    function Close: WordBool;
    property  ControlInterface: ICRCLANX read GetControlInterface;
    property  DefaultInterface: ICRCLANX read GetControlInterface;
    property IsRunning: WordBool index 206 read GetWordBoolProp;
  published
    property Anchors;
    property Port: Integer index 201 read GetIntegerProp write SetIntegerProp stored False;
    property MocRange: WideString index 202 read GetWideStringProp write SetWideStringProp stored False;
    property SaveCommnuLog: WordBool index 203 read GetWordBoolProp write SetWordBoolProp stored False;
    property LogSavePath: WideString index 204 read GetWideStringProp write SetWideStringProp stored False;
    property MaxLogFileSize: Integer index 205 read GetIntegerProp write SetIntegerProp stored False;
    property Gateway: WideString index 209 read GetWideStringProp write SetWideStringProp stored False;
    property OnConnect: TCRCLANXOnConnect read FOnConnect write FOnConnect;
    property OnDisconnect: TCRCLANXOnDisconnect read FOnDisconnect write FOnDisconnect;
    property OnConsume: TCRCLANXOnConsume read FOnConsume write FOnConsume;
    property OnSuccess: TCRCLANXOnSuccess read FOnSuccess write FOnSuccess;
    property OnError: TCRCLANXOnError read FOnError write FOnError;
    property OnApplyCorrect: TCRCLANXOnApplyCorrect read FOnApplyCorrect write FOnApplyCorrect;
    property OnQueryBalance: TCRCLANXOnQueryBalance read FOnQueryBalance write FOnQueryBalance;
    property OnDeposit: TCRCLANXOnDeposit read FOnDeposit write FOnDeposit;
    property OnFailure: TCRCLANXOnFailure read FOnFailure write FOnFailure;
    property OnQueryWare: TCRCLANXOnQueryWare read FOnQueryWare write FOnQueryWare;
    property OnCorrect: TCRCLANXOnCorrect read FOnCorrect write FOnCorrect;
    property OnChangePassword: TCRCLANXOnChangePassword read FOnChangePassword write FOnChangePassword;
    property OnApplySubsidy: TCRCLANXOnApplySubsidy read FOnApplySubsidy write FOnApplySubsidy;
    property OnChangeCardState: TCRCLANXOnChangeCardState read FOnChangeCardState write FOnChangeCardState;
    property OnWithdrawal: TCRCLANXOnWithdrawal read FOnWithdrawal write FOnWithdrawal;
    property OnTransferring: TCRCLANXOnTransferring read FOnTransferring write FOnTransferring;
  end;procedure Register;resourcestring
  dtlServerPage = 'Servers';  dtlOcxPage = 'Servers';implementationuses ComObj;procedure TCRCLANX.InitControlData;
const
  CEventDispIDs: array [0..15] of DWORD = (
    $000000C9, $000000CA, $000000CB, $000000CC, $000000CD, $000000CE,
    $000000CF, $000000D0, $000000D1, $000000D2, $000000D3, $000000D4,
    $000000D5, $000000D6, $000000D7, $000000D8);
  CControlData: TControlData2 = (
    ClassID: '{B0BA1D0B-7D4B-4E0C-953B-F687AF9207D0}';
    EventIID: '{8D163ADE-DCE7-4494-9089-DA7C001E9384}';
    EventCount: 16;
    EventDispIDs: @CEventDispIDs;
    LicenseKey: nil (*HR:$00000000*);
    Flags: $00000000;
    Version: 401);
begin
  ControlData := @CControlData;
  TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnConnect) - Cardinal(Self);
end;procedure TCRCLANX.CreateControl;  procedure DoCreate;
  begin
    FIntf := IUnknown(OleObject) as ICRCLANX;
  end;begin
  if FIntf = nil then
    begin
      DoCreate;
    end;
end;function TCRCLANX.GetControlInterface: ICRCLANX;
begin
  CreateControl;
  Result := FIntf;
end;function TCRCLANX.Open: WordBool;
begin
  Result := DefaultInterface.Open;
end;function TCRCLANX.Close: WordBool;
begin
  Result := DefaultInterface.Close;
end;procedure Register;
begin
  RegisterComponents(dtlOcxPage, [TCRCLANX]);
end;end.

解决方案 »

  1.   

    是不是DELPHI版本有问题呀,或者是参数传递有问题的
      

  2.   

    你调用的那个接口,会用到诸如filename类的参数,如果你认为你的代码内问题,就找供应商
      

  3.   

    CRCLAN.ocx控件的问题,找这个供应商
      

  4.   

    我换了2010后,在IDE模式下不存在这个问题。但是如果持续的刷卡的时候,会出现
    1、access violation at address 069c352a in module 'CRCLAN.ocx'. Read of address 000000000
    2、invalid pointer operation
    错误,我一致怀疑是ocx的问题,但找不到供应商,能不能有其他的办法?