デバッガーが Ntdll.NtRaiseException で停止するアドレス 0xfeeefeee の読み取りでアクセス違反が継続的に発生します。これ以上デバッグすることはできません。アプリに障害が発生したことを示すループ状態が発生するためです。ステップを使用するか、実行します...これは私を最初に戻します。これは明らかに IDE (Delphi XE2) 32 ビットでのみ発生します。私のアプリケーションは、次のコードを使用しています
Var
XMLDoc: IXMLDocument;
Begin
If FOD.Execute Then //File Open Dialog
Begin
Try
Try
XMLdoc := NewXMLDocument(); //TXMLDocument.Create(Nil);
Result := FOD.FileName;
XMLDoc.FileName := XMLFilename;
XMLDoc.Active := True;
ファイルが開いたら、xml データ バインディング ウィザード (File New Other XML) から読み込まれた関数を呼び出して、上記のプロシージャで開いた xml ファイルを解析します。私の意図は、csv ファイルを作成し、sqlldr を使用してデータを Oracle データベースにエクスポートすることです。IDE の外ではすべての作業が見つかり、一晩中 sring グリッドにデータを表示するだけでアプリケーションを実行したままにすることができますが、ide では数分以内にクラッシュします。コール スタックには、有用なものは何も表示されません。ご覧のとおり、TXMDocument.create と NewXML を試しましたが、役に立ちませんでした。オブジェクトをフォームに配置して、そのインスタンスを無駄に使用しようとしました。どなたかアイデアをお願いします。(Windows 7 64 ビットですが、オラクルの依存関係のために 32 ビットに準拠しています)
編集、debug dcus がオンになっている場合でも、コール スタックは、ole32.dll およびその他の nt 関連の dll への参照だけで何も役に立たないことを示します
アプリのコードを以下に示します (一部)。
Function TXMLForm.OpenFile: String;
Var
XMLDoc: IXMLDocument;
Begin
If FOD.Execute Then
Begin
Try
Try
XMLdoc := NewXMLDocument(); //TXMLDocument.Create(Nil);
Result := FOD.FileName;
XMLDoc.FileName := XMLFilename;
XMLDoc.Active := True;
SB1.Panels[1].Text := FOD.Filename;
Finally
// xmldoc := nil;
End;
Except
On E: Exception Do
ShowMessage('Excpetion in Opening or creating XML Document. ' + E.Message);
End;
End
Else
Result := '';
End;
openfile は、このタイプのプロシージャによって呼び出されます
Procedure TXMLForm.StandardProfile1Click(Sender: TObject);
Var
Stand: Standard.IXMLProfileData;
I, X: Integer;
Begin
XMLFileName := Openfile;
If Xmlfilename <> '' Then
Begin
Stand := Standard.LoadProfileData(XMLFileName);
SG1.RowCount := Stand.Count;
Sg1.ColCount := Stand.Device[Stand.Count - 1].Count + 7;
// SG1.ColCount := 55;
SG1.Cells[0, 0] := 'SERIALNO';
SG1.Cells[1, 0] := 'MFGSERIALNO';
SG1.Cells[2, 0] := 'SUPPLYTYPE';
SG1.Cells[3, 0] := 'SERVICEPOINTNO';
SG1.Cells[4, 0] := 'PARAMETERCODE';
SG1.Cells[5, 0] := 'INTERVALPERIOD';
SG1.Cells[6, 0] := 'STARTTIME';
// For X := 0 To 47 Do
// SG1.Cells[7 + X, 0] := 'INTERVAL' + Inttostr(X);
For X := 0 To Stand.Device[Stand.Count - 1].Count - 1 Do
SG1.Cells[7 + X, 0] := 'INTERVAL' + Inttostr(X);
For I := 0 To Stand.Count - 1 Do
Begin
SG1.Cells[0, I + 1] := Stand.Device[I].SerialNo;
SG1.Cells[1, I + 1] := Stand.Device[I].MfgSerialNo;
SG1.Cells[2, I + 1] := Stand.Device[I].SupplyType;
SG1.Cells[3, I + 1] := Stand.Device[I].ServicePointNo;
SG1.Cells[4, I + 1] := Stand.Device[I].ParameterCode;
SG1.Cells[5, I + 1] := Stand.Device[I].IntervalPeriod;
SG1.Cells[6, I + 1] := Stand.Device[I].StartTime;
// For X := 0 To 47 Do
For X := 0 To Stand.Device[Stand.Count - 1].Count - 1 Do // 47
Begin
If Stand.Device[I].Interval[X] = '' Then
SG1.Cells[7 + X, I + 1] := 'TRUE'
Else
SG1.Cells[7 + X, I + 1] := Stand.Device[I].Interval[X];
End;
End;
End;
End;
前に述べたように、TXMDocument、IXMLDocument、および Create と NewXMDocument を使用してみましたが、それでもエラーが発生します。DEbug dcus' は違いはありません。プロジェクトヘッダーと MadExcept で FastMM4 を使用するのにうんざりしていますが、エラーをキャッチしません。