AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Virtual-Deklaration führt zu "CPU-Debugger-Fehlern"
Thema durchsuchen
Ansicht
Themen-Optionen

Virtual-Deklaration führt zu "CPU-Debugger-Fehlern"

Ein Thema von DocE · begonnen am 17. Sep 2006 · letzter Beitrag vom 17. Sep 2006
Antwort Antwort
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#1

Virtual-Deklaration führt zu "CPU-Debugger-Fehlern"

  Alt 17. Sep 2006, 12:18
Hallo zusammen!

Das nun folgende Problem ergab sich bei der Einbindung der TAudioIO-Komponente (ist vielleicht einigen bekannt), die einfache Soundverarbeitung ermöglicht. Führt man ein Programm aus, in der diese verwendet wird, kommt es nach dem Beenden zu „CPU-Fehlern“, es öffnet sich also der Delphi CPU-Debugger.

Auch wenn der Fehler im „normalen Betrieb“ ohne Debugger so gut wie nie auftritt (selten kommt: „Der Vorgang written (…) konnte nicht (…) ausgeführt werden) ist dies doch störend, zumal irgendetwas falsch sein muss und ich hasse „unsaubere“ Programme.

Also habe ich mich auf die Suche gemacht und nach einigen Stunden (!) den Fehler eingrenzen können. Es lag daran, dass eine Funktion als virtual deklariert war.

Das Problem tritt erst auf, wenn Bezug auf die Komponente im implementation-Bereich genommen wird, die reine Einbindung der Datei uses oder die Deklaration einer Variable führt nicht zu dem Fehler. Allerdings reicht es aus, wenn z.B. TMeineKomponente.Create(self); im Quelltext steht, jedoch nie ausgeführt wird. Entfernt man das virtual ist das Problem behoben.

Abgesehen davon, dass die Funktion vermutlich überhaupt nicht als virtual benötigt wird, da niemals abgeleitet, frage ich mich dennoch, wie und warum es zu diesem Fehler kommt.

Trotz einiger Nachforschungen und „intensivem Nachdenken“ kann ich mir das Problem nicht erklären. Aus diesem Grund habe ich ein sehr kleines Demo-Projekt angefertigt, welches hier angehängt ist.

Ich würde mich freuen, wenn sich der ein oder andere Tüftler oder „Wissende“ sich des Problems annehmen und mich aufklären könnte.

Zusätzlich poste ich an dieser Stelle noch einmal den gekürzten Quelltext, für diejenigen, die sich das Projekt nicht herunterladen wollen oder den Fehler sofort erkennen:

Delphi-Quellcode:
 unit MainUnit;

interface

uses
(...), MeineKomponente;

type
  TMainForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.Button1Click(Sender: TObject);
begin

  // muss nicht einmal ausgeführt werden, es kommt trotzdem zum Fehler,
  // solange dies hier steht
  TMeineKomponente.Create(self);

end;

end.

Und TMeineKomponente:

Delphi-Quellcode:
 unit MeineKomponente;

interface

uses
  SysUtils, Classes, ExtCtrls, MMSystem;


type
  TMeineKomponente = class(TComponent)
  private
    { Private-Deklarationen }

    function MySetup : Boolean; virtual;
(...)
  published
    { Published-Deklarationen }

    constructor Create(AOwner : TComponent); override;
    destructor    Destroy; override;

  end;


implementation

(...)

function TMeineKomponente.MySetup : Boolean;
var ErrorMsgC: array [0..255] of Char;
begin

  waveInGetErrorText(0,ErrorMsgC,Sizeof(ErrorMsgC));
  StrPas(ErrorMsgC);

end;

end.

Vielen Dank schon mal!


Grüsse
...Doc
Angehängte Dateien
Dateityp: zip virtualproblem_199.zip (2,0 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Virtual-Deklaration führt zu "CPU-Debugger-Fehlern&

  Alt 17. Sep 2006, 12:23
Du solltest auf jedenfall die erzeugte Instanz ine eine Instantvariable speichern:

MeineKomp := TMeineKomponente.Create(self);
Markus Kinzler
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#3

Re: Virtual-Deklaration führt zu "CPU-Debugger-Fehlern&

  Alt 17. Sep 2006, 12:30
Das ist mir klar, habe das nur so eingebaut, um zu verdeutlichen, dass es bereits so zu einem Fehler kommt...

Man kann übrigens in Button1Click auch nur TMeineKomponente.ClassName abfragen/eintragen und es kommt zu dem gleichen Fehler. Auch ohne dass Button1Click jemals ausgeführt wird...
  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 19:52 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