Condividi tramite


Problemi noti relativi alla portabilità da eMbedded Visual C++

Aggiornamento: novembre 2007

Sono disponibili numerosi strumenti e risorse C++ che consentono di convertire i progetti eMbedded Visual C++ esistenti in Visual Studio. Per ulteriori informazioni, vedere Aggiornamento guidato da eMbedded Visual C++ a Visual Studio.

Le librerie ATL (Active Template Library), MFC (Microsoft Foundation Classes) e C++ standard sono state aggiornate e modificate dopo l'introduzione di eMbedded Visual C++. Per un elenco delle classi non supportate, vedere Elenco di classi eVC non supportate in MFC dalla versione 3.0 alla 9.0. Il codice utilizzato per chiamare queste classi deve essere modificato per la compilazione in Visual Studio. I problemi seguenti si verificano solitamente quando si sta eseguendo il porting da eMbedded Visual C++.

Problema

Descrizione/risoluzione

Il metodo CCeSocket::OnReceive() non viene chiamato in MFC per dispositivi più recenti di Windows CE 3.0.

La risoluzione è illustrata nella sezione Supporto tecnico Microsoft della Knowledge Base nell'articolo Errore: CCeSocket OnReceive() non deve essere chiamato per i socket di dati accettati.

La classe CArchive Class non è supportata.

Molti progetti eMbedded Visual C++ contengono riferimenti alla classe CArchive Class. Per risolvere questo problema, è necessario rimuovere i riferimenti a CArchive.

Alcune classi di insiemi, ad esempio CObArray, CMapPtrToPtr e così via, vengono implementate in Windows CE 5.0 tramite versioni basate su modelli di CArray<>, CMap<> e così via. In eMbedded Visual C++ versione 4.0 e nelle librerie C++ desktop, questi tipi vengono implementati come classi normali non basate su modelli. Pertanto, se si chiama IMPLEMENT_SERIAL per queste classi basate su modelli, si provoca un errore di compilazione:

errore C2039: 'classCObArray': non è un membro di 'CArray<TYPE,ARG_TYPE>'

errore C2065: 'classCObArray': identificatore non dichiarato

Per ovviare a questa differenza di implementazione, modificare la macro IMPLEMENT_SERIAL in modo da utilizzare CObject anziché CObArray, CMapPtrToPtr e così via.

In altre parole, non scrivere:

IMPLEMENT_SERIAL(CYourClass, CObArray, 0)

Ma:

IMPLEMENT_SERIAL(CYourClass, CObject, 0)

Per impostazione predefinita, in eMbedded Visual C++ versione 4.0, lo stile della finestra di dialogo è impostato su DS_MODALFRAME per le applicazioni MFC per Pocket PC. In MFC 9,0, questo stile non è supportato.

Esempi

In questa sezione sono delineati alcuni degli errori più comuni che possono verificarsi quando si esegue la migrazione del progetto da eMbedded Visual C++ a Visual Studio. Per ulteriori informazioni, vedere Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005 (informazioni in lingua inglese).

  • Errore di compilazione: Impossibile aprire il file di inclusione 'wceres.rc'

    Fare clic con il pulsante destro del mouse sul file di risorse del progetto (RC), selezionare Visualizza codice, quindi impostare la riga seguente come commento:

    //#include "wceres.rc"
    
  • NUM_TOOL_TIP non definito

    Nel file di intestazione, definire #define _WIN32_WCE_PSPC per le configurazioni Pocket PC e _WIN32_WCE_WFSP per le configurazioni Smartphone utilizzate.

  • Impossibile aprire il file OLDNAMES.lib

    In Esplora soluzioni fare clic con il pulsante destro del mouse sul file di progetto, quindi scegliere Proprietà.

    Fare clic su Linker. Modificare la proprietà Ignora libreria specifica aggiungendo OLDNAMES.LIB.

  • Overload ambiguo

    La libreria C++ standard e la libreria ATL dispongono di API presenti anche nell'SDK del dispositivo. Evitare l'ambiguità utilizzando uno spazio dei nomi, ad esempio ::.

  • Il tipo "THUMB" del computer del modulo è in conflitto con il tipo "ARM" del computer di destinazione

    In Esplora soluzioni fare clic con il pulsante destro del mouse sul file di progetto, quindi scegliere Proprietà.

    In Proprietà di configurazione, espandere il nodo Linker e fare clic sulla proprietà Riga di comando. Rimuovere l'opzione /MACHINE:THUMB dalla riga di comando per ciascuna configurazione di Windows Mobile 5.0 nelle pagine Proprietà.

  • Stringa di risorsa non separata correttamente

    Potrebbe verificarsi un problema in base al quale le stringhe di risorsa delle applicazioni di cui è stato eseguito il porting non vengono separate correttamente. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file di progetto, quindi scegliere Proprietà. In Proprietà di configurazione espandere Risorse, quindi fare clic sulla proprietà Riga di comando. Aggiungere un'opzione -n alla riga di comando del compilatore di risorse.

  • Previsto BEGIN nell'errore della finestra di dialogo.

    In genere, questo errore è seguito da errori del tipo "Impossibile trovare il file", ad esempio "Impossibile trovare il file: 0x1". Passare al file RC indicato dall'errore e modificare il codice in modo che venga utilizzata un'istruzione #ifdef intorno a una dichiarazione FONT, come illustrato nell'esempio di codice riportato di seguito.

    Codice originale:

    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
    

    Codice modificato:

    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
    

Vedere anche

Concetti

Aggiornamento guidato da eMbedded Visual C++ a Visual Studio

Altre risorse

Windows Mobile Platform Migration FAQ for Developers