3

SOAP API メソッドを呼び出すと、次のメッセージが表示されます。

First chance exception at $74EDB9BC. Exception class EAccessViolation with 
message 'Access violation at address 007004F6 in module 'DB2.exe'. 
Read of address 00000005'. Process DB2.exe (3768)

スタックトレースから得たものは次のとおりです。

74EDB9AF 8945C0        mov [epb-$40],eax
74EDB9B2 8D45B0        lea eax,[edp-$50]
74EDB9B5 50            push eax
74EDB9B6 FF155C11ED74  call dword ptr [$74ed115c]
74EDB9BC C9            leave

私は Delphi にあまり詳しくありません (古いプログラムを維持しているだけです)。ここで起こっていることをデバッグする方法を教えてもらえますか? Delphi 2005 を使用しています。

これが失敗しているコードです。呼び出し時にエラーが発生し、 &のデータがそこにあり、正しいことUpdateContactを知っています:aContactFCompanyID

function TScheduleCenterBeta.AccountUpdate(aContact: c_ScheduleCenterBetaAPI.Contact): boolean;
begin
  try
    SendAuthHeader();
    FContact := FSoapService.UpdateContact(aContact, FCompanyID);
  except
    on e:Exception do begin
      MessageDlg(e.Message,mtWarning,[mbOK],0);
    end;
  end;
  result := true;
end;

オブジェクトFContactは、マスター オブジェクトの作成時に作成されます。

constructor TScheduleCenterBeta.Create(aOwner: TComponent; aCallID: integer = -1);
begin
  inherited Create(aOwner);

  FCallID := aCallID;
  FCompanyID := c_ScheduleCenterBetaAPI.CompanyID.Create();
  FCompanyID.ServiceCompanyID := StrToInt(TfrmCall(Screen.ActiveForm).Company.IP_CompanyID);
  FProperty_ := c_ScheduleCenterBetaAPI.Property_.Create();
  FContact := c_ScheduleCenterBetaAPI.Contact.Create();
  FContact.ContactID := -1;
  FContact.Address := c_ScheduleCenterBetaAPI.Address.Create();
  FAppointmentSlot := c_ScheduleCenterBetaAPI.AppointmentSlot.Create();
end;

もう1つの奇妙な点は、エラーが発生したり消えたりすることです。プログラムを停止してから (Delphi デバッグ モードを使用して) 再起動すると、エラーが発生する場合と発生しない場合があります。また、Delphi自体に問題がないことを確認するためにDelphiを再起動しましたが、何も変わらないようです。

4

0 に答える 0