Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: MFC (Visual C++) ::  Nach Migration auf VS 2017: LoadToolBar(..) hat einen Haltepunkt ausgelöst  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
elmut19
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.12.2013
Beiträge: 121
Beitrag elmut19 Mitglied 09:20:21 06.12.2017   Titel:   Nach Migration auf VS 2017: LoadToolBar(..) hat einen Haltepunkt ausgelöst            Zitieren

Hallo,

hier leider meine nächsten Schwierigkeiten mit der Migration.

Immer, wenn LoadToolBar(ID) aufgerufen wird, bleibt die Anwendung im Debugger stehen.
Datei: afxext.inl, Codezeile 98 (aus den Tools von VS2017)

Code:
// CToolBar
_AFXEXT_INLINE BOOL CToolBar::LoadToolBar(UINT nIDResource)
    { return LoadToolBar(MAKEINTRESOURCE(nIDResource)); }    // hier ist die Fehler-Marke
_AFXEXT_INLINE BOOL CToolBar::LoadBitmap(UINT nIDResource)
    { return LoadBitmap(MAKEINTRESOURCE(nIDResource)); }

Die Fehlermeldung lautet dann : "MyPrg.exe hat einen Haltepunkt ausgelöst"

Dazu noch mein Quellcode, in dem das ausgelöst wird: (in VS2005 alles OK)
Code:
if(!m_wndCommandBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |   CBRS_ALIGN_TOP | CBRS_TOOLTIPS) ||
   !m_wndCommandBar.LoadToolBar(iToolBar))

Die Anwendung kann man aber dann weiterlaufen lassen, ohne dass ein Fehler auftritt.
Und es passiert nur im Debugger, das Release läuft.
Nachfolgend passiert dies dann immer, wenn "LoadToolBar(..)" aufgerufen wird.

In den Einstellungen sind alle "c++ Exeptions" eingestellt
und bei den "win32 Exeptions" eigentlich nur wirkliche Fehler.
Also die selben, wie zuvor in VS2005.

Weiss hier jemand Rat?

Grüsse
Helmut

Hab gerade Update 15.5 auf VS2017 ausgeführt:
Nun läufts ein paar Schritte weiter.
Fehlermeldung nun in "bartool.cpp", Zeile 433 ( Aufruf von "VERIFY ..." )

Code:
1
2
3
4
5
6
7
8
9
10
11
BOOL CToolBar::AddReplaceBitmap(HBITMAP hbmImageWell)
{
    // need complete bitmap size to determine number of images
    BITMAP bitmap;
    VERIFY(::GetObject(hbmImageWell, sizeof(BITMAP), &bitmap));
 
    // add the bitmap to the common control toolbar
    BOOL bResult;
    if (m_hbmImageWell == NULL)
    {
         ...


Zuletzt bearbeitet von elmut19 am 14:48:22 06.12.2017, insgesamt 6-mal bearbeitet
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15366
Beitrag Martin Richter Moderator 21:13:32 06.12.2017   Titel:              Zitieren

Die Bitmap ist nicht da oder kann nicht geladen werden...

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
elmut19
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.12.2013
Beiträge: 121
Beitrag elmut19 Mitglied 22:28:14 06.12.2017   Titel:              Zitieren

Hallo Martin,

danke für die Antwort.
Leider ist es die einzige.


Aber es ist leider nicht die Lösung.
Eine fehlende Bitmap hätte sich ja durch ihr Fehlen bemerkbar gemacht.
Und die Anwendung funktioniert ja einwandfrei, wenn man dem Debugger einfach "Weiter" befiehlt.
Und das Release Binary muckt an diesen Stellen gar nicht auf!
Und unter dem VS2005 geht das auch.

Ich habe allerdings vor längerer Zeit dort eine modifizierte Toolbar eingesetzt, die mir 24 Bit Farbtiefe erlaubt.
Das hatte ich einfach noch vergessen, zu erwähnen.
Leider weiss ich nimmer, wie dieses Projekt, ich göaube aus "CodeProject.com, hiess.

Eigentlich wäre ich schon zufrieden, wenn ich diese Fehlermeldung in den Einstellungen deaktivieren könnte.
Das habe ich auch versucht. Aber die gibt es dort einfach nicht.

Grüsse
Helmut


Zuletzt bearbeitet von elmut19 am 22:31:35 06.12.2017, insgesamt 1-mal bearbeitet
elmut19
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.12.2013
Beiträge: 121
Beitrag elmut19 Mitglied 08:58:24 07.12.2017   Titel:              Zitieren

Noch eine Ergänzung:
Gerade eben habe ich festgestellt, dass der Resourcen Editor einen Fehler bringt.
Anscheinend wurde das Projekt dann wohl nicht vollständig migriert.

Die Fehlermeldung verweist ausserdem auf eine ältere Version von Visual Studio. Sie lautet:
"C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\prsht.h(0)"
"error RC2247:SYMBOL name too long"

Es gibt zwar einen Knopf, über den man den Code bearbeiten können sollte,
aber leider schliesst er nur das Meldefenster.

Und wie bekomme ich dieses Problem gelöst?


Zuletzt bearbeitet von elmut19 am 09:05:23 07.12.2017, insgesamt 1-mal bearbeitet
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15366
Beitrag Martin Richter Moderator 10:36:24 07.12.2017   Titel:              Zitieren

Wenn GetObject fehlschlägt muss es ja einen Grund haben...
Lass Dir den Errocode anzeigen.
Ich vermute hbmImageWell ist NULL, also liegt der Fehler einen Level tiefer.

Ersetz die Bitmap mit was einfacherem...

Mit der anderen Meldung kann ich nichts anfangen.

Ansonsten nimm die Neuen CMfc Klassen... aus MFC Next da hast Du 24bit Unterstützung, Alphablending etc.

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
elmut19
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.12.2013
Beiträge: 121
Beitrag elmut19 Mitglied 11:27:24 07.12.2017   Titel:              Zitieren

Danke Martin,

Ja, "hbmImageWell" ist NULL.
Beim Programmstart läuft es einmal durch "CToolBar::SetBitmap(HBITMAP hbmImageWell)" durch.
Dort meckert dann die "ASSERT" Anweisung.
Aber ich weiss leider nicht mit was einfacherem ich die Bitmap ersetzen soll.
Ich habe nichts Anderes.

Es gibt ja keinen wirklichen Error Code. Nur das, was ich schon geschrieben habe.
Und es passiert auch nicht wirklich ein Fehler.
Es ist nur unmöglich, die Anwendung zu debuggen, wenn man bei jeder Aktion dreimal auf "Weiter" klicken muss.
Und ich kann die Meldung nicht abschalten!

Und die RC2247 Meldung gibt es schon in anderen Foren, für die Umstellung von einer älteren VS-Version auf VS 2008.
Aber die dortigen Lösungsansätze kann ich nicht auf das jetzige Problem übertragen.

Das Ganze sieht dann nach einer längeren Unternehmung aus.
Für die letzliche Umstellung auf eine neue Entwicklungsumgebung muss ich sicher die neuen MFC-Klassen nehmen.
Die Info war schon mal wichtig, für später.

Momentan wollte ich eigenlich nur die neuen Analysemöglichkeiten für den Heap nutzen,
um nach einem anderen Fehler zu suchen.
Aber diese Tools verstehe ich leider noch nicht. (Dauert wohl auch länger)

Also gebe ich mich wieder meiner Verzweiflung hin.

Aber danke
Grüsse
Helmut


Zuletzt bearbeitet von elmut19 am 12:02:49 07.12.2017, insgesamt 2-mal bearbeitet
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15366
Beitrag Martin Richter Moderator 12:34:44 07.12.2017   Titel:              Zitieren

Was bezweckst Du damit?
SetBitmap(NULL) ist nicht nötig!
LoadBitmap wirft doch die alten Infos raus?
Alle Funktionen verwenden am Ende AddReplaceBitmap...

Ist keine Bitmap bisher da, wird die neue gesetzt.
Ist eine da wird die alte ersetzt...

Als Id wird einfach das handle selbst benutzt...

Du hast den Sourcecode!

Ansonsten (ich wiederhole mich):
Schmeiß den alten CToolBar raus und nimm CMFCToolBar! Der kann auch mehr als 16-Farben

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15366
Beitrag Martin Richter Moderator 12:41:17 07.12.2017   Titel:              Zitieren

Bzgl. RC2247.

Deine Symbole, die der RC-Preprozessor benutzt sind einfach zu lang.
Welche Header benötigst Du denn wirklich in der RC-Datei.

Alles was Du nicht brauchst in einen #ifndef RC_INVOKED einschließen

Beispielö für eine #stdafx.h

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef RC_INVOKED

#include <afx.h>            // MFC core and standard components

#include <oledb.h>          // OLEDB Header
#include <afxwin.h>         // MFC core and standard components
....
#endif
 
// Hier kommt alles was der RC benötigen könnte

#include "xyzWinIDs.h"


#define ID_XYZ_LAST 4711

#define USE_32BPP_ARGB_BITMAPS
#define UI_SCALE_COMBOBOXES
...


Vielleicht musst Du hier nur was in der RC2 Datei auslagern.

Evtl. solltest Du einen zweiten Thread aufmachen. Macht das diskutieren einfacher!

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming


Zuletzt bearbeitet von Martin Richter am 12:41:47 07.12.2017, insgesamt 1-mal bearbeitet
elmut19
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.12.2013
Beiträge: 121
Beitrag elmut19 Mitglied 13:09:50 07.12.2017   Titel:              Zitieren

Meine StdAfx.h sieht folgendermassen aus:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#if !defined(AFX_STDAFX_H__08D6FC5F_6098_4F9A_B912_8EDF6187CD93__INCLUDED_)
#define AFX_STDAFX_H__08D6FC5F_6098_4F9A_B912_8EDF6187CD93__INCLUDED_
 
#undef WINVER
#define WINVER 0x0601
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0601
 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN        // Selten verwendete Teile der Windows-Header nicht einbinden
#include <afxwin.h>         // MFC-Kern- und -Standardkomponenten
#include <afxext.h>         // MFC-Erweiterungen
#include <afxdisp.h>        // MFC Automatisierungsklassen
#include <afxdtctl.h>       // MFC-Unterstützung für allgemeine Steuerelemente von Internet Explorer 4
#include <commctrl.h>       // gehört zu untenstehendem pragma für "comctl32.lib"
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>         // MFC-Unterstützung für gängige Windows-Steuerelemente
#endif // _AFX_NO_AFXCMN_SUPPORT
 
#include "CDialogFortschritt.h"
 
#include <objidl.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
 
// Use v6 ComCtl32 Windows Common controls - without this line two different versions were loading
#pragma comment(lib, "comctl32.lib")
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
 
 
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.
 
#endif // !defined(AFX_STDAFX_H__08D6FC5F_6098_4F9A_B912_8EDF6187CD93__INCLUDED_)


Für das "SetBitmap(..)" kann ich nichts.
Das wird von "m_wndCommandBar.CreateEx(..)" aufgerufen. Einmal eben, beim Erzeugen.

Ich verwende die "XTrueColorToolBar" aus "cocdeproject.com" von
Hans Dietrich.

Aber was alles müsste ich aus der StdAfx.h mit dem "RC_INVOKED" alles rausnehmen?


Zuletzt bearbeitet von elmut19 am 13:18:05 07.12.2017, insgesamt 1-mal bearbeitet
Martin Richter
Moderator

Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 15366
Beitrag Martin Richter Moderator 13:15:21 07.12.2017   Titel:              Zitieren

Bzgl RC-Invoke Alles!

Bzgl. CToolBar::CreateWindowEx. Nö. Dort wird nicht SetBitmap aufgerufen?
Meines Erachtens wird CToolBar::SetBitmap in der ganzen MFC nicht aufgerufen...

Ersetze diese Bitmap, mal mit einer Standard 16 Farben Bitmap!

_________________
Martin Richter (MVP für C++ von 2000 bis 2015) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming


Zuletzt bearbeitet von Martin Richter am 09:49:38 11.12.2017, insgesamt 1-mal bearbeitet
C++ Forum :: MFC (Visual C++) ::  Nach Migration auf VS 2017: LoadToolBar(..) hat einen Haltepunkt ausgelöst  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.