AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OLE Access Violation - Race Conditions?
Thema durchsuchen
Ansicht
Themen-Optionen

OLE Access Violation - Race Conditions?

Ein Thema von beginnerXE1 · begonnen am 30. Sep 2021 · letzter Beitrag vom 17. Mär 2022
 
beginnerXE1

Registriert seit: 22. Dez 2020
10 Beiträge
 
#5

AW: OLE Access Violation - Race Conditions?

  Alt 17. Mär 2022, 15:36
Spät, später, heute...

Vielen Dank für deine Antwort damals, Delphi.Narium. Mit der Problematik war ich tatsächlich nicht allein, aber keiner der Hinweise führte zum Erfolg. Zeitmangel führte dann zur fehlenden Antwort und keinen neuen Erkenntnissen.

Kürzlich hatte ich wieder etwas Zeit und habe das Lesen der XML ausgelagert in einen eigenen StreamReader mit Shared-Access, aber am Fehlerbild hatte sich nichts geändert. Da es also nicht am Einlesen/Laden der XML lag, hatte ich keinen weiteren Ansatzpunkt mehr und bin zurück zu den Anfängen und Grundlagen gegangen.

Über https://www.oreilly.com/library/view...6595/ch04.html bin ich auf die Lösung "isMultiThread" gestoßen:
Zitat:
In a multithreaded application or library, you must be sure that the global variable IsMultiThread is True. Most applications do this automatically by calling BeginThread or using the TThread class. If you write a DLL that might be called from a multithreaded application, though, you might need to set IsMultiThread to True manually.

Allocating memory (with GetMem or New) and freeing memory (with FreeMem and Dispose) is thread-safe. Delphi automatically protects its memory allocator for use in multiple threads (if IsMultiThread is True, which is one reason to stick with Delphi’s BeginThread function instead of using the Windows API CreateThread function).
Also erst mal kontrolliert, was isMultiThread zurückliefert: False. Nach dem Einfügen von "isMultiThread := True;" gleich nach "begin" in der DLL-Hauptdatei blieben die Fehler aus. Es waren also keine Race Conditions, wie ich vermutet hatte, sondern Zugriffsfehler durch geteiltes Speichermanagement. Ich verstehe leider nicht, wieso die Fehler früher oder bei den ursprünglichen .dlls nicht aufgetreten sind und nicht auftreten sondern nur bei den neu erstellten, aber vielleicht werden heutzutage mehr Optimierungen vorgenommen. Das Flag wurde damals nicht gesetzt und der Aufruf der .dlls hat sich auch nicht geändert.

Ich hoffe, dass die Rückmeldung vielleicht anderen noch etwas Zeit und Kopfzerbrechen erspart: CoInitializeEx + isMultiThread.

Geändert von beginnerXE1 (17. Mär 2022 um 15:41 Uhr)
  Mit Zitat antworten Zitat
 


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:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz