EAccessViolation Mögliche Ursachen

Hallo Delphi-Freaks,

was sind mögliche Ursachen für eine EAccesViolation-Exception?

Beim einbinden von zwei *.TBL-Dateien in denen Typdefintionen und
OLE-Server-Befehle in Form von Funktionsaufrufen definiert werden
tritt der Fehler auf.

Allerdings nur bei einem Programm das noch mit zwei anderen
Busanbindunngen (PMon und UDP) arbeitet.

Manchmal tritt auch eine EOleSysException auf
Message „CoInitialize wurde nicht aufgerufen“.

Diese Exception scheint in der *.TBL deklariert worden zu sein.

Gibt es noch andere Ursachen als die die in der Hilfe genannt werden?

  • einen nil-Zeiger dereferenziert,
  • in eine Code-Page schreibt oder
  • versucht, auf eine Speicheradresse zuzugreifen, für die der Anwendung
    kein virtueller Speicher zugewiesen wurde.

bzw. wie kann eine dieser Ursachen überhaupt auftreten?

könnte so etwas auftreten wenn man alle möglichen DLLs die UDP, OLE
usw. gleichzeitig benutzt?

Wie könnte ich versuchen die Fehlerquelle weiter einzugrenzen?

Bin dankbar für jeden Hinweis

Gruß Michael

Hey,

also wenn z.B. dein OLE-Server "doppelt"genutzt wird, dann tretet ne andere Exception auf. Glaub net, dass dein Fehler durch das Einbinden,etc. auftritt, eher durch die Operationen die du sicherlich programmiert hast. Falsch deklarieret Records, ein falsch dimensionierter Zeiger oder die falsche Verwendung eines Pointers dürfte wahrscheinlicher sein… Vielleicht hast du auch soviele Objekte eingebunden, dass der Stack voll war, dann tritt auch so ne Meldung auf bzw. kann unter Umständen so eine auftreten. Naja, kann man eigentlich schlecht beurteilen so ganz ohne Code… welche Ergebnisse hast du denn beim Debuggen erzielt??? Wg. Fehler eingrenzen…

mfg - jens

Hallo Jens,

ich habe im Internet eine Lösung gefunden

siehe unten
die ist an anderer Stelle jedoch als „workaround“ bewertet worden.

Das debug-Ergebnis ist:

je nachdem wie schnell ich mit F8 die einzelnen Zeilen durchtickere tritt der Fehler an 3 unterschiedlichen Stellen auf

es sind jedoch völlig harmlose Befehle

zum Beispiel steht der Cursor nach der Fehlermeldung auf dem
End einer procedure

naja wie dem auch sei ich habe den Fehler es mit untenstehendem code abgestellt gekriegt.

Grüße

Stefan

How do I eliminate the „CoInitialize has not been called“ error?

COM libraries can be picky about when CoInitialize is called. In order to guarantee it is initialized at the proper time, use the following unit (save it as ComInit.pas):

unit ComInit;

interface

uses
ActiveX;

implementation

initialization
CoInitializeEx(nil,COINIT_MULTITHREADED);
finalization
CoUninitialize;
end.

Make sure this is the first unit listed in the “uses” statement of your .DPR file. For example:

uses
ComInit in ‚ComInit.pas‘,
WebBroker,
ApacheApp,
dMain in ‚dMain.pas‘ {dmMain: TcxWebHomeDataModule},
wMain in ‚wMain.pas‘ {wpmMain: TcxWebPageModule} {*.html};

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]