AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Microsoft Visual C++ Runtime Library - R6025
Thema durchsuchen
Ansicht
Themen-Optionen

Microsoft Visual C++ Runtime Library - R6025

Ein Thema von SvB · begonnen am 12. Aug 2009 · letzter Beitrag vom 12. Aug 2009
Antwort Antwort
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Microsoft Visual C++ Runtime Library - R6025

  Alt 12. Aug 2009, 01:02
Ich habe heute Stunden mit einem Problem gekämpft und möchte Euch zur Info folgendes durchgeben.

Nach einer größerem Programmänderung, die ich in weitern Teilen erst mal aus dem Kopf heraus machen musste, bevor ich das erste mal wieder kompiliert habe, hatte ich dann beim Beenden vom Programm die Fehlermeldung:
Zitat:
Microsoft Visual C++ Runtime Library
Runtime Error!
Programm C:\Entwicklung\prog.exe
R6025
- pure virtual function call
Ich habe dann das Forum durchsucht, nichts gefunden. Google spuckt tonnenweise Ergebnisse raus, die aber auch nichts gebracht haben. Die Aktualisierung der C++ Runtime hat auch nichts gebracht. Microsoft selbst schreibt folgendes: Link

Das hat mich dann dazu veranlasst meine neu erstellten Threads erst mal "abzuschalten" und Schritt für Schritt alles nacheinander wieder zu "aktivieren" um festzustellen, wo das Problem liegt.

Ich habe ungefähr folgenden Code gehabt:
Delphi-Quellcode:
TmyThread = class(TThread)
private
  FDatabase: TADODatabase;
protected
  procedure Execute; override;
public
  constructor Create(CreateSuspended: Boolean);
  destructor Destroy; override;
  property Database: TADODatabase read FDatabase write FDatabase;
end;

constructor TmyThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

destructor TmyThread.Destroy;
begin
  inherited;
end;

procedure TmyThread.Execute;
begin
  CoInitialize(nil); // Für ADO - muss in jedem eigenen Thread selbst gemacht werden. Unit ActiveX einbinden
  try
    while not Terminated do begin
      // mach irgend etwas, berechne
    end;
  finally
    CoUninitialize;
  end;
end;

.
.
.

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  myThread := TmyThread.Create(True);
  myThread.FreeOnTerminate := True;
  myThread.Database := frmMain.ADODatabase;
  myThread.Resume; // Starte Thread und laufe einmal durch
end;
Beim Beenden vom Programm kam dann dieser C++ Runtime Error, der mich schier zur Verzweiflung gebracht hat.
Das Problem ist wohl, dass mein Haupt-Thread (Formular) schon beendet ist, bevor der Thread an sich selbst beendet ist, der Thread aber noch versucht auf frmMain.ADODatabase zu zugreifen, was ein COM-Objekt ist und dadurch diesen Fehler gebracht hat.

Also, wenn Ihr mal ein ähnliches Problem habt, dann könnt Ihr vielleicht in dieser Richtung suchen.

Ich habe meinen Thread jetzt so umgeschrieben, dass ADODatabase im Thread selbst erzeugt und zerstört wird und bis jetzt gab es keine Probleme mehr.

Grüße
Sven
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Microsoft Visual C++ Runtime Library - R6025

  Alt 12. Aug 2009, 07:27
Ist klar:

Du verwendest COM-Komponenten (Hier die ADO/OLE DB-Komponenten hinter ADOExpress/dbGo) und verwendest die Interfacezeiger direkt in einen anderen Thread. Nach COM-Spielregeln ist es aber nötig Interfaces bei Verwendung in einem anderen Thread als den Thread in dem sie erzeugt wurden mit CoMarshalInterThreadInterfaceInStream() und CoGetInterfaceAndReleaseStream() für die verwendung in dem anderen Thread vorzubereiten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Microsoft Visual C++ Runtime Library - R6025

  Alt 12. Aug 2009, 20:10
Tja, wenn man es nicht weiß. Mit solchen Dingen musst ich mich bisher noch nicht befassen. Jetzt bin ich um eine Erfahrung reicher.

Danke
Sven
  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 16:10 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