AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EAccessViolation mögliche Ursachen

Ein Thema von michael-calvin · begonnen am 6. Nov 2002 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
michael-calvin

Registriert seit: 6. Nov 2002
4 Beiträge
 
#1

EAccessViolation mögliche Ursachen

  Alt 6. Nov 2002, 19:30
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
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2
  Alt 6. Nov 2002, 19:45
Hallo MC,

erstmal herzlich willkommen hier in der Delphi-PRAXiS.
Den einen Fehler mit der Meldung "CoInitialize wurde nicht aufgerufen" kannst Du schnell selber beheben: Rufe diese Funktion auf, bevor Du auf Dein COM-Objekt zugreifst und rufe beim Beenden Deiner Anwendung "CoUninitialize" auf. Beide Funktionen sind in der Unit "ole2.pas" deklariert.

Im Artikel "MSDN-Library :: CoInitialize" findest Du weitere Informationen.

Was die restlichen Fehler angeht, so kann ich Dir leider auch nicht weiterhelfen.


Grüße,
Daniel
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 6. Nov 2002, 22:22
Moin Michael,

am besten packst Du CoInitialize in den initialization Abschnitt und CoUninitialize in den finalization Abschnitt der Unit des Hauptformulares.
Diese beiden Funktionen müssen einmal je Thread aufgerufen werden, und das sollte dann möglichst früh (CoInitialize) bzw. möglichst spät (CoUninitialize) erfolgen.

Zitat von Michael:
Wie könnte ich versuchen die Fehlerquelle weiter einzugrenzen?
Ich hoffe mal, dass Du die Stelle im Programm, an der der Fehler auftritt einigermassen wirst eingrenzen können.
An dieser "verdächtigen" Stelle setzt Du dann einen Breakpoint und gehst im Einzelschritt durch, bis der Fehler auftritt.
Dann hast Du zumindest schon mal die Stelle an der etwas unzulässiges passiert, und kannst Dir überlegen, was denn nun die Ursache ist.

Genauer geht's leider nicht, denn es gibt, wie Du schon selber gesagt hast, viele mögliche Ursachen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
michael-calvin

Registriert seit: 6. Nov 2002
4 Beiträge
 
#4

Vielen Dank - weitere Fragen

  Alt 7. Nov 2002, 11:06
Hallo Daniel und Chris,

vielen Dank für Eure Antworten.

Ich habe in die ole2.pas und in die SDK-Seite reingeschaut.

Mir ist aber noch nicht klar geworden WIE genau man die Funktion
jetzt aufruft.

Könnt Ihr mir Beispiele posten?

Vielen Dank schon im Voraus

Gruß Michael
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 7. Nov 2002, 11:45
Moin Michael,

in der Unit des Hauptformulares

Delphi-Quellcode:
uses
   ....
  ,ole2;
und dann unten:

Delphi-Quellcode:
initialization
begin
  CoInitialize(nil);
end;
Delphi-Quellcode:
finalization
begin
  CoUninitialize;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
michael-calvin

Registriert seit: 6. Nov 2002
4 Beiträge
 
#6

hab was gutes dazu gefunden ! http://www.devexpress.com/prod

  Alt 7. Nov 2002, 20:46
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):
Delphi-Quellcode:
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:
Delphi-Quellcode:
uses
  ComInit in 'ComInit.pas',
  WebBroker,
  ApacheApp,
  dMain in 'dMain.pas{dmMain: TcxWebHomeDataModule},
  wMain in 'wMain.pas{wpmMain: TcxWebPageModule} {*.html};
http://www.devexpress.com/products/vcl/ewf/faq.asp
[edit=FuckRacism]Code Syntax eingefügt; das geht mit [*code] [*/code] halt ohne den *[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#7

Re: EAccessViolation mögliche Ursachen

  Alt 24. Aug 2004, 15:11
Ich habe folgendes Problem in einem Thread:

Delphi-Quellcode:
begin
  if(CoInitializeEx(nil,COINIT_MULTITHREADED) = S_OK) then
    try
    ... //gekürzt
          end;
         Allocator.Free(PIDL);
        end;
      end;
    end;
  finally
    CoUnInitialize;
  end;
end;
Der 1. Thread läuft sauber durch und beim 2. bekomme ich dann die zitiere EAccessViolation.
Aber beim Ausführen von ConUnInitialize.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#8

Re: EAccessViolation mögliche Ursachen

  Alt 24. Aug 2004, 16:24
Kann es sein, dass ich CoInitialize und UnCoInitialize NICHT im Thread machen darf, da diese Aktionen sich sonst überschneiden und gegenseitig beeinflussen?
Ich habe die beiden Elemente jetzt in die Hauptschleife des Programms gepackt und es funktioniert wunderbar.
1. Kein Meckern im Thread das kein CoInitialize durchgeführt wurde.
2. Keine EAccessViolation bei Aufruf von UnCoInitialize.

Kann das einer bestätigen bitte?

Gibt es denn Befehle, die überprüfen können, ob ich schon initialisiert oder unitialisiert habe?
Ich brauche die COM-OBjects nur im Thread, dass ist ein bisschen Holzhammer-Methode die Hauptschleife mit den Befehlen einzuschließen..
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz