Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ATL 8.0 Steuerelement

Empfohlene Antworten

Veröffentlicht

Ich habe in einem Dialog ein ATL 8.0 Steuerelement, sobald ich den Dialog mit DoModal versuche zu aufrufen schmiert er bei ab


if (CreateDlgIndirect(lpDialogTemplate, CWnd::FromHandle(hWndParent), hInst))
[/PHP]

Bei Debugen lande ich nicht mal in

[PHP]
CDialog::DoDataExchange(pDX);

Hat jemand ein Idee was kann es sein bzw. wie muss ich vorgehen damit ich den Fehler finden kann

Ich habe in einem Dialog ein ATL 8.0 Steuerelement,
Was für ein Steuerelement ist das? Wie hast du es eingefügt?

sobald ich den Dialog mit DoModal versuche zu aufrufen schmiert er bei ab


if (CreateDlgIndirect(lpDialogTemplate, CWnd::FromHandle(hWndParent), hInst))
[/PHP]

Was heißt "schmiert ab"? Fehlermeldung? Assertion? Wenn ja, wo?
  • Autor

Ich habe es gar nicht hinzugefügt, es ist ein älteres Programm der diesen s… benutzt.

So wie ich das verstehe ist es ein automatisch generierten IDispatch Objekt. Der von CWnd abgeleitet mit zwei Funktionen:


void MyDateiViewer::Show(const VARIANT& DateiName, long Format)
{
static BYTE parms[] =
VTS_VARIANT VTS_I4;
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
&DateiName, Format);
}
[/PHP]

[PHP]
void MyDateiViewer::Show(const VARIANT& DateiName, long Format)
{
static BYTE parms[] =
VTS_VARIANT VTS_I4;
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
&DateiName, Format);
}

Was heißt "schmiert ab"? Fehlermeldung? Assertion? Wenn ja, wo?

In der Funktion

CreateDlgIndirect

An der Stelle

hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,

pParentWnd->GetSafeHwnd(), AfxDlgProc);

mit

Debug Assertion Failed!

Programm;..

File: f:\....\occont.cpp

Line: 926

Ich habe es gar nicht hinzugefügt, es ist ein älteres Programm der diesen s… benutzt.
Das heißt, das lief schon mal? Dann die Standardfrage: Was hast du gemacht?

Debug Assertion Failed!

Programm;..

File: f:\....\occont.cpp

Line: 926

Das ist der interessante Teil.

Such bitte diese Datei auf deinem Rechner, und schau nach, was da in Zeile 926 passiert. Welche Funktion ist das?

Der Pfad in der Assertion bezieht sich übrigens nicht auf deinen Rechner, sondern den, wo deine MFC gebaut wurde (also irgendwo bei Microsoft). Die Datei sollte aber trotzdem auf deinem Rechner sein, irgendwo im VC-Installationsverzeichnis.

Nachtrag: Die Datei heißt occcont.cpp (also drei c). Bevor du vergeblich nach dem falschen Dateinamen suchst ;)

  • Autor

Codeausschnitt aus occcont.cpp ab Line 910 bis 926


//AfxGetDlgItemStartFromHWND fix , is to handle non-unique ids
//of resource items (IDC_STATIC), that causes ::GetDlgItem
//to always find the first (in Win32 z-order child list) window with
//this id, and thus m_listSitesOrWnds contained several instances of the same hwnd.

//First time start searching from first z-order, else
//search from 1 after the previous window.
HWND hwndSearchFrom= (hwndStart == NULL) ?
GetWindow(m_pWnd->GetSafeHwnd(),GW_CHILD) :
::GetWindow(hwndStart,GW_HWNDNEXT);

HWND hwndCtrl=AfxGetDlgItemStartFromHWND(pOccDlgInfo->m_pItemInfo[i].nId, hwndSearchFrom);
//If not found, revert to prev method of GetDlgItem, this means Win32 children list and
//resource item array are out of sync
if (hwndCtrl == NULL)
{
hwndCtrl = ::GetDlgItem(m_pWnd->GetSafeHwnd(),pOccDlgInfo->m_pItemInfo[i].nId);
TRACE(traceAppMsg, 0, "Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.\n");
}
COleControlSiteOrWnd *pTemp =
new COleControlSiteOrWnd(
hwndCtrl,
pOccDlgInfo->m_pItemInfo[i].bAutoRadioButton);
ASSERT(IsWindow(pTemp->m_hWnd));
[/PHP]

Bei debugen kommt ist hwndCtrl gleich null kommt also in den TRACE

  • Autor
Werden noch weitere Trace-Ausgaben erzeugt? Die müssten im Output des Debuggers erscheinen.


Warning: OleInitialize returned scode = RPC_E_CHANGED_MODE ($80010106).
Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.
[/PHP]

Ich habe das Projekt von VS 6.0 auf VS 7.0 umgestellt.

Bei suchen auf die occcont.cpp Datei musste ich feststellen, dass ich davon zwei habe eine unter: C:\Programme\Microsoft Visual Studio\VC98\MFC\SRC und die andere C:\Programme\Microsoft Visual Studio 8\VC\ce\atlmfc\src\mfc

Die beide Dateien sind unterschiedlich groß, mein Projekt bezieht die zweite, vielleicht ist die für mein Projekt nicht richtig??

Ich habe das Projekt von VS 6.0 auf VS 7.0 umgestellt.
Hast du im Zuge dieser Umstellung irgendwo Managed Code hinzugefügt? Oder das Projekt auf die Verwendung der Common Language Runtime umgestellt?

Bei suchen auf die occcont.cpp Datei musste ich feststellen, dass ich davon zwei habe eine unter: C:\Programme\Microsoft Visual Studio\VC98\MFC\SRC und die andere C:\Programme\Microsoft Visual Studio 8\VC\ce\atlmfc\src\mfc

Die beide Dateien sind unterschiedlich groß, mein Projekt bezieht die zweite, vielleicht ist die für mein Projekt nicht richtig??

Solange du die MFC-Bibliotheken nicht selbst baust, ist das egal. Aber bist du sicher, dass du auf VS7 umgestellt hast, und nicht auf VS8 (2005)? VS7 sollte eigentlich auch eine occcont.cpp enthalten, aber davon ist bei dir keine Spur.
  • Autor
Hast du im Zuge dieser Umstellung irgendwo Managed Code hinzugefügt? Oder das Projekt auf die Verwendung der Common Language Runtime umgestellt?

nein

Aber bist du sicher, dass du auf VS7 umgestellt hast, und nicht auf VS8 (2005)? VS7 sollte eigentlich auch eine occcont.cpp enthalten, aber davon ist bei dir keine Spur.

natürlich auf VS8 :eek, sorry

ist die erste warnung


OleInitialize returned scode = RPC_E_CHANGED_MODE
[/PHP]

unbedeutet

ist die erste warnung


OleInitialize returned scode = RPC_E_CHANGED_MODE
[/PHP]

unbedeutet

Nein, die ist IMHO die entscheidende. Irgendwie ruft dein Programm CoInitializeEx mit COINIT_MULTITHREADED auf. Der spätere Aufruf von OleInitialize scheitert dann.

Ich habe dazu auch etwas gefunden (z.B. hier), aber das scheint sich nur auf Managed-Anwendungen zu beziehen.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.