Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Verschiedebe Ergebnisse je nach gelinkter Runtime

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.09.2003, 18:47 Uhr
0xdeadbeef
Gott
(Operator)


Moin,

Ich schreib mir hier gerade ne DLL zusammen, die nachher aus Excel aufgerufen werden soll, und hab ziemlich merkwürdige Effekte. Wenn ich die DLL gegen die Debug-runtime-library linke, läuft zwar mein Code sehr toll, wenn aber nachher Excel zugemacht wird, schmiert es reproduzierbar ab.
Wenn ich dagegen die normale Runtime nehme, kann man Excel ohne Probleme zumachen, aber bei normaler Benutzung des Programms schreibt die scheinbar irgendwie wild in meinem Speicher rum, so dass Membervariablen meiner Objekte auf mysteriöse Weise ihre Werte verändern und ein GetDlgItem(ID)-Call mit einer gültigen ID Bogus zurückliefert.

Was unterscheidet die Debug- von der normalen runtime, was so einen Unterschied hervorrufen könnte?

Ich bin dankbar für jede Hilfe, ich bin hier echt am Verzweifeln. Ich kann auch keine Buffer Overflows oder sonstiges Zeug haben, ich benutze weder Pointer noch Felder.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.09.2003, 21:01 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Bei der debug-Version werden alle variablen (ggf mit NULL) initialisiert, bei release nicht...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.09.2003, 21:02 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo deadbeef,
schwer zu sagen was da faul ist. ABER debugg dorch mal die Release Dll. Du machs bei der VC6.0 Version folgendes:
Projekteinstellungen >>> C/C++(Kategorie Allgemein) in der Combobox "Debug-Info" die Einstellung "Programmdatenbank" auswählen.
Danach Linker (Kategorie Allgemein) die Checkbox Debug-Info generieren" anhaken.
Projekt komplett neu übersetzen. Jetzt dürfte das Debuggen auch in der Release funzen. Ist aber keine Garantie, dass Du alle Bugs erwischt, da der Debugger sich dann manchmal verhaspelt.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.09.2003, 10:23 Uhr
0xdeadbeef
Gott
(Operator)


Das hatte ich auch schon rausgekriegt. Bringt aber in diesem Zusammenhang nicht viel, weil das Programm im Release-Modus schon anfängt zu spinnen, bevor es abschmiert. Ich hab aber den Fehler etwas weiter eingrenzen können.

Also, folgendes: Ich hab hier ne von CDialog abgeleitete Klasse, die eine von CWnd abgeleitete Klasse als Control enthält. So ne Art Canvas, in die ich reinmale. Dazu noch ein paar andere Controls, unter anderem eine Gruppe von Radiobuttons und eine ComboBox. Diese schicken, wenn sie selbst ein entsprechendes Signal kriegen (ON_COMMAND_RANGE über die IDs der Radio-Buttons bei der Radio-Button-Group, ON_CBN_SELCHANGE bei der Combobox) per CWnd::PostMessage ein von mir definiertes Signal (WM_SCALECHANGE = WM_USER + 1 und WM_CLIPCHANGE = WM_USER + 2 respektive) an den Canvas. Der hat in seiner Message Map die Signale so:

C++:
    ON_MESSAGE(WM_SCALECHANGE, OnScaleChange)
    ON_MESSAGE(WM_CLIPCHANGE, OnClipChange)


verbunden. In den entsprechenden Methoden wird die Auswahl interpretiert und an andere Funktionen (setScaling und setClipping) weitergegeben, die dann die entsprechenden Member setzen und die Darstellung auf dem Canvas aktualisieren.

Ich bin gerade dabei, das ganze über AfxMessageBoxes zu debuggen. Gibts eigentlich ne Möglichkeit, aus Excel raus eine C++-Dll schrittweise (also im VC+-Debugger) zu durchlaufen?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.09.2003, 11:25 Uhr
0xdeadbeef
Gott
(Operator)


Ich habs jetzt soweit eingegrenzt, dass er mir irgendwo außerhalb meines Kontrollbereiches (zwischen "ich bin fertig mit diesem Signal" und "hier haste das nächste") nach this + 76 schreibt. ARGH!
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.09.2003, 11:31 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
0xdeadbeef postete
Ich bin gerade dabei, das ganze über AfxMessageBoxes zu debuggen. Gibts eigentlich ne Möglichkeit, aus Excel raus eine C++-Dll schrittweise (also im VC+-Debugger) zu durchlaufen?


Ja. In den Projekt settings excel als auszurüfhrendes Programm angeben; sobald Deine DLL geladen wurde im Source da einen Breakpoint setzen, wo du magst.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.09.2003, 11:51 Uhr
0xdeadbeef
Gott
(Operator)


Jetzt hab ich nen ganz merkwürdigen Effekt. Ich lad also excel in den Debugger und setz nen Breakpoint bevor der Dialog das WM_CLIPCHANGE-Signal an den Canvas sendet. Wenn ich den Breakpoint setze, läuft alles wunderbar. Nehm ich den Breakpoint weg, schreibt er mir wieder wild im Speicher rum.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.09.2003, 12:14 Uhr
0xdeadbeef
Gott
(Operator)


OK, da hab ich mich geirrt - der Debugger macht ja vor ihm ein Fenster auf, weswegen ihm nachher ein WM_PAINT geschickt wird, und da holt er sich die Daten wieder. Also, er schreibt mir auch mit breakpoint außerhalb meines Codes nach this + 76.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.09.2003, 12:19 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
Wo verdammt hast du immer die lustigen Signaturen her
Los, rück den Link raus
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.09.2003, 12:40 Uhr
virtual
Sexiest Bit alive
(Operator)


@Windalf
man fortune
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: