bigpoint Geschrieben 17. August 2007 Teilen Geschrieben 17. August 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 19. August 2007 Autor Teilen Geschrieben 19. August 2007 was ich nicht verstehe ist das ich nicht mal in CDialog::DoDataExchange(pDX); [/PHP] lande:eek Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 19. August 2007 Teilen Geschrieben 19. August 2007 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 20. August 2007 Autor Teilen Geschrieben 20. August 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. August 2007 Teilen Geschrieben 20. August 2007 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: 926Das 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 20. August 2007 Autor Teilen Geschrieben 20. August 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. August 2007 Teilen Geschrieben 20. August 2007 Das heißt, das lief schon mal? Dann die Standardfrage: Was hast du gemacht? Werden noch weitere Trace-Ausgaben erzeugt? Die müssten im Output des Debuggers erscheinen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 20. August 2007 Autor Teilen Geschrieben 20. August 2007 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?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. August 2007 Teilen Geschrieben 20. August 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 20. August 2007 Autor Teilen Geschrieben 20. August 2007 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. August 2007 Teilen Geschrieben 20. August 2007 ist die erste warnung OleInitialize returned scode = RPC_E_CHANGED_MODE [/PHP] unbedeutetNein, 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 20. August 2007 Autor Teilen Geschrieben 20. August 2007 Ich habe dazu auch etwas gefunden hier ich weis nur nicht wie ich den ActicX Element kompielieren kann?! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.