Zum Inhalt springen

ATL 8.0 Steuerelement


bigpoint

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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??

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...