AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C++ C++ constructor's - der Letzte macht das Liccht aus ?
Thema durchsuchen
Ansicht
Themen-Optionen

C++ constructor's - der Letzte macht das Liccht aus ?

Ein Thema von paule32.jk · begonnen am 11. Aug 2024 · letzter Beitrag vom 12. Aug 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#1

C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 11. Aug 2024, 14:27
Hallo,
Heute auch mal eine C++ Frage:

- wird nach dem löschen (also delete) des letzten ctor's ein ExitProcess eingeleitet ?

weil, ich habe eine DLL, in der ich einen ctor lösche, aber die aufrufende Funktion von Delphi hinaus, wird nicht mehr erreicht.
von daher nehme ich an, das nach dem letzten ctor eine Exit-Routine eingeleitet wird... ?!?
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 11. Aug 2024, 21:25
Eine DLL wird explizit geladen und entladen. Welche Objekte du dort im Speicher hast, ändert daran nichts.

Die Beschreibung klingt eher so, dass die Aufrufkonvention nicht zusammenpasst (stdcall üblicherweise). Da du keinen Code gezeigt hast, lässt sich dazu nicht viel sagen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 11. Aug 2024, 22:31
ok, mein Fehler.

um den Fehler zu sehen, hier der .cc Code: hier.

wenn ich die letzten zwei Zeilen lösche, dann klappt der Aufruf, und die Funktion reicht durch.
Der dtor wird aber aufgerufen (also die Funktion dtor_QChae).

nur das Objekt wird ja nicht gelöscht, was aber passieren soll.

Es gibt zwei NameSpace's:
- 1 mal der von Qt5 (GUI Framework), und:
- 1 mal der von qvc (mein Eigener)
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 00:08
Was passiert denn, wenn du von Delphi aus debuggst?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 08:24
moin moin.

- als erstes hatte ich den Fehler 0xc00005 bekommen, was auf eine fehlende .dll zu schließen mag.
- dann hatte ich von RELEASE auf DEBUG gestellt
- der DEBUG Modus ergab, das die Funktion dtor_QChar sauber aufgerufen wurde, und danach die Funktion durchgereicht wurde

also:

Delphi-Quellcode:
destructor QChar.Destroy;
begin
  // wird im RELEASE Mode durchgereicht
  dtor_QChar(ptr_cc);
  // ab hier ist der RELEASE Mode auf einmal zu Ende ??
  ...
  inherited Destroy;
end;
im Gegensatz zu dem DEBUG Mode:

Delphi-Quellcode:
destructor QChar.Destroy;
begin
  // wird im DEBUG Mode durchgereicht
  dtor_QChar(ptr_cc);
  // ab hier wird dann normal weiter gewerkelt
  ...
  inherited Destroy;
end;
Es scheint mir, das RELEASE und DEBUG Mode sehr sehr unterschiedliche Dinge machen.
Aber das ist doch sehr nahe an Voodoo-Programming ??
was sollte so speziell am DEBUG Mode sein ?
das Instruction Set dürfte dabei doch nicht betroffen sein ?
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 12:55
sodele.
Es scheint zu funktionieren.
Die Ausgabedatei im DEBUG Mode ist in etwa gleich groß der RELEASE Mode - mit der Ausnahme, das keine Meldung kommen wie 0xc007b oder 0xc0005.
Das einzige was ich in der DCE 12 IDE Eingestellt habe, ist der DEBUG Mode, aber jetzt kommts: ohne Debug-Informationen übersetzt.
Es sind also keine Debug-Informationen enthalten (jedenfalls ich kann keine finden).
Von daher verstehe ich nicht, das der RELEASE so viel Ärger macht.
Der DEBUG Mode ohne Debug-Informationen scheint ein anderes Format auszugeben als der RELEASE.
very voodoo...

Aber naja, es klappt jetzt erstmal das, was ich angestrebt habe.
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#7

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 13:07
Der DEBUG Mode ohne Debug-Informationen scheint ein anderes Format auszugeben als der RELEASE.
very voodoo...
TL;DR;

Der DEBUG Modus bindet aber womöglich doch noch im Linker irgendwelche Debug-Libraries statisch mit ein,
welche im RELEASE dann andere sind.
Die Debug-Informationen beziehen sich ja erstmal nur auf die vom eigenen SourceCode kompilierte Files.
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 13:41
das ja richtig.

Aber ich erhalte, wenn ich mit BPL Packages linke, fast die selben Image-Größen
- im RELEASE wie auch
- im DEBUG

und das sind für die gerade aktuelle Anwendung etwas über 320 KB an Daten.
- die DLL änderte sich ja nicht, wärend meiner Test's.
- die DLL und das 64-Bit DEBUG Image liegen im gleichen Verzeichnis, keine Probleme
- die DLL und das 64-Bit RELEASE Image liegen im gleichen Verzeichnis, Probleme

Die Probleme sind:
- 1 mal 0xc0007 oder:
- 1 mal 0xc0005

beides sind Windows NT (ich nehme mal an kernel32.dll) Sachen.
Daraus schließe ich, das DCE 12 nur im DEBUG Sinn macht, und wer Luxus haben möchte, dann die Version höher kaufen soll, um dann kleineren Content zu erhalten, mit dem RELEASE Mode.

Ist aber auch eine gute Strategie, um die Raubkopierer zu enttarnen:
- hört, hier haben wir ein Image Eurer Anwendung...
- schauen wir doch mal in den binary Salat, und suchen nach bestimmten Mustern, die nur die DEBUG hat
- zack, aus die Maus, Maus trapped.

Ich mein, das würde ich als großer Compiler-Anbieter ja auch so machen.
Aber das sich darüber so ausgeschwiegen wird, naja...
Sollen ja nicht Andere wissen.

Ich hatte vor kurzen ein ähnliches Thema.
Da ging es aber um den FPC.
Der hatte da so ein paar kleine Features eingebaut, womit die Erzeugung einer Eigener system unit recht umständlich ging, wenn man nicht im Besitz dieser kleinen compilerproc Informations-Dinger ist/war.
Das müssten die Entwickler aber auch schon wieder geändert haben, mit wiederum neuen Features.
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 15:56
Daraus schließe ich, das DCE 12 nur im DEBUG Sinn macht, und wer Luxus haben möchte, dann die Version höher kaufen soll, um dann kleineren Content zu erhalten, mit dem RELEASE Mode.

Ist aber auch eine gute Strategie, um die Raubkopierer zu enttarnen:
- hört, hier haben wir ein Image Eurer Anwendung...
- schauen wir doch mal in den binary Salat, und suchen nach bestimmten Mustern, die nur die DEBUG hat
- zack, aus die Maus, Maus trapped.

Ich mein, das würde ich als großer Compiler-Anbieter ja auch so machen.
Aber das sich darüber so ausgeschwiegen wird, naja...
Sollen ja nicht Andere wissen.
Ich bin alles andere als gute auf EMB zu spechen, aber bitte behalten deine Verschwörungstheorien für Dich.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: C++ constructor's - der Letzte macht das Liccht aus ?

  Alt 12. Aug 2024, 16:03
Das Problem ist meistens, dass irgendwo noch eine (kompilierte) Unit liegt, die statt der verwendet wird, die du vermutest.

Das lässt sich mit Everything von Voidtools leicht prüfen.

Das lässt sich auch leicht testen, indem du eine Fehlermeldung oder einen Fehler an der Stelle einbaust. Wenn der Fehler dann nicht auftritt, wird nicht der aktuelle Quelltext verwendet.

Und was deine Theorien angeht:
Bevor du so etwas äußerst, solltest du das ganze auch geprüft haben. Der generierte Code ist ja jederzeit einsehbar.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (12. Aug 2024 um 16:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:18 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