Bekannte Probleme beim Portieren von eMbedded Visual C++
Aktualisiert: November 2007
Einige C++-Tools und -Ressourcen unterstützen Sie bei der Konvertierung vorhandener eMbedded Visual C++-Projekte in Visual Studio. Weitere Informationen finden Sie unter Assistent zum Aktualisieren von eMbedded Visual C++ auf Visual Studio.
Active Template Library (ATL), Microsoft Foundation Classes (MFC) und C++-Standardbibliotheken wurden seit der Einführung von eMbedded Visual C++ aktualisiert und geändert. Eine Liste der nicht unterstützten Klassen finden Sie unter Liste der eVC-Klassen, die nicht von MFC 3.0 bis 9.0 unterstützt werden. Code, der diese Klassen aufruft, muss geändert werden, damit er in Visual Studio kompiliert werden kann. Die folgenden Probleme treten im Allgemeinen beim Portieren von eMbedded Visual C++ auf.
Problem |
Beschreibung/Lösung |
---|---|
Die CCeSocket::OnReceive()-Methode wird in MFC für Geräte, die unter einer höheren Version als Windows CE 3.0 ausgeführt werden, nicht aufgerufen. |
Die Lösung wird im folgenden Knowledge Base-Artikel zu Hilfe und Support erörtert: Bug: CCeSocket OnReceive() does not get called for accepted data sockets. |
Die CArchive Class-Klasse wird nicht unterstützt. |
Viele eMbedded Visual C++-Projekte enthalten Verweise auf die CArchive Class-Klasse. Um dieses Problem zu beheben, müssen Sie Verweise auf CArchive entfernen. |
Bestimmte Auflistungsklassen wie CObArray, CMapPtrToPtr usw. werden in Windows CE 5.0 mit auf Vorlagen basierenden Versionen von CArray<>, CMap<> usw. implementiert. In eMbedded Visual C++, Version 4.0, und C++-Desktopbibliotheken werden diese Typen als normale, nicht auf Vorlagen basierende Klassen implementiert. Daher führt das Aufrufen von IMPLEMENT_SERIAL bei diesen auf Vorlagen basierenden Klassen zu einem Kompilierungsfehler: Fehler C2039: 'classCObArray': ist kein Member von 'CArray < TYPE, ARG_TYPE >' Fehler C2065: 'classCObArray': nichtdeklarierter Bezeichner |
Um diesen Implementierungsunterschied zu beheben, ändern Sie das IMPLEMENT_SERIAL-Makro so, dass anstelle von CObArray, CMapPtrToPtr usw. CObject verwendet wird. Anders gesagt, schreiben Sie nicht: IMPLEMENT_SERIAL(CYourClass, CObArray, 0) Sondern verwenden Sie stattdessen: IMPLEMENT_SERIAL(CYourClass, CObject, 0) |
eMbedded Visual C++, Version 4.0, legt für MFC-Pocket PC-Anwendungen standardmäßig das Dialogfeldformat DS_MODALFRAME fest. In MFC 9.0 wird dieses Format nicht unterstützt.
Beispiele
In diesem Abschnitt werden einige häufigere Fehler erörtert, die beim Migrieren eines Projekts von eMbedded Visual C++ auf Visual Studio auftreten können. Weitere Informationen finden Sie unter Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005.
Compilerfehler: Kann Includedatei "wceres.rc" nicht öffnen
Klicken Sie mit der rechten Maustaste auf die Projektressourcendatei (RC), wählen Sie Code anzeigen aus, und kommentieren Sie dann die folgende Zeile aus:
//#include "wceres.rc"
NUM_TOOL_TIP nicht definiert
Definieren Sie in der Headerdatei #define _WIN32_WCE_PSPC für die Pocket PC-Konfigurationen und _WIN32_WCE_WFSP für die Smartphone-Konfigurationen.
Kann Datei OLDNAMES.lib nicht öffnen
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektdatei, und klicken Sie dann auf Eigenschaften.
Klicken Sie auf Linker. Bearbeiten Sie die Eigenschaft Bibliothek ignorieren, indem Sie OLDNAMES.LIB hinzufügen.
Mehrdeutige Überladung
C++-Standardbibliothek (SCL) und ATL enthalten APIs, die auch im Gerät-SDK vorhanden sind. Lösen Sie die Mehrdeutigkeit durch Angabe eines Namespaces auf, z. B. ::.
Modul-Computertyp "THUMB" steht in Konflikt mit dem Zielcomputertyp "ARM".
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektdatei, und klicken Sie dann auf Eigenschaften.
Erweitern Sie unter Konfigurationseigenschaften den Knoten Linker, und klicken Sie dann auf die Eigenschaft Befehlszeile. Entfernen Sie bei jeder Windows Mobile 5.0-Konfiguration auf der Seite Eigenschaft den Schalter /MACHINE:THUMB aus der Befehlszeile.
Ressourcenzeichenfolge nicht ordnungsgemäß getrennt
Möglicherweise treten Probleme auf, wenn Ressourcenzeichenfolgen aus portierten Anwendungen nicht ordnungsgemäß getrennt werden. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektdatei, und klicken Sie dann auf Eigenschaften. Erweitern Sie unter Konfigurationseigenschaften den Knoten Ressourcen, und klicken Sie dann auf die Eigenschaft Befehlszeile. Fügen Sie der Ressourcencompilerbefehlszeile den Schalter -n hinzu.
Fehler: BEGIN in Dialogfeld erwartet
Diesem Fehler folgen normalerweise Fehler wegen nicht gefundener Dateien, z. B. "Datei nicht gefunden: 0x1." Wechseln Sie zur RC-Datei, die in der Fehlermeldung genannt wird, und ändern Sie den Code so, dass er eine #ifdef-Anweisung vor und nach der FONT-Deklaration einfügt. Im folgenden Codebeispiel wird dies veranschaulicht.
Ursprünglicher Code:
IDD_COMPTEST DIALOGEX 0, 0, 186, 95 STYLE DS_SETFONT | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN END
Geänderter Code:
IDD_COMPTEST DIALOGEX 0, 0, 186, 95 STYLE DS_SETFONT | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT #ifdef _WIN32_WCE FONT 8, "MS Sans Serif" #else FONT 8, "MS Sans Serif", 0, 0, 0x1 #endif BEGIN END
Siehe auch
Konzepte
Assistent zum Aktualisieren von eMbedded Visual C++ auf Visual Studio