Domanda

ho aggiornato con successo un'applicazione MFC che è stato compilato con una vecchia versione di Developer Studio per Visual Studio 2008. Un fosse bisogno molto piccolo numero di cambiamenti a causa di alcuni cambiamenti di rottura in MFC. Ora che tutto funziona, mi piacerebbe fare il passo successivo e compilare la soluzione con /clr.

Per fare ciò, ho trovato informazioni utili sul sito Web MSDN:

Questi sono i passi che ho preso:

  1. Imposta Runtime Library a Multi-threaded Debug DLL (/ MDD) .
  2. Imposta Utilizzo di MFC a Usa MFC in una DLL condivisa .

Tuttavia, così facendo mi impedisce di collegare il progetto:

  1. Il riferimento alle afxData non può più essere risolto; in qualche modo, afxData è visibile solo quando si collega staticamente contro MFC. Nel mio codice, ho la seguente dichiarazione:

    extern AFX_DATA AUX_DATA afxData;

    che funziona bene con la versione MFC collegata in modo statico.

  2. I riferimenti al _afxThreadState e _afxWinState non possono essere risolti sia.

Qui ci sono i messaggi di errore completo:

error LNK2001: unresolved external symbol "struct AUX_DATA afxData" (?afxData@@3UAUX_DATA@@A)
error LNK2001: unresolved external symbol "class CThreadLocal<class _AFX_THREAD_STATE> _afxThreadState" (?_afxThreadState@@3V?$CThreadLocal@V_AFX_THREAD_STATE@@@@A)
error LNK2001: unresolved external symbol "class CProcessLocal<class _AFX_WIN_STATE> _afxWinState" (?_afxWinState@@3V?$CProcessLocal@V_AFX_WIN_STATE@@@@A)

nel caso in cui questo potrebbe essere correlato al nome storpiatura ...

Quindi, cosa posso fare per collegare in modo dinamico contro MFC, ma ancora riferisco afxData, _afxThreadState e _afxWinState?

È stato utile?

Soluzione

Quando si utilizza MFC in una DLL condivisa, AUX_DATA deve essere dllimported.

extern __declspec(dllimport) AUX_DATA afxData

Per stato del thread, invece di usare le classi template, utilizzare uno di questi

AFX_MODULE_THREAD_STATE* pState = _AFX_CMDTARGET_GETSTATE()->m_thread;
AFX_THREAD_STATE* pState = AfxGetThreadState(); 

A seconda delle informazioni di stato desiderato. Ad esempio, vedere qui per alcuni membri che sono stati spostati al modulo dello stato per correggere un bug. Si noti che AfxGetModuleThreadState esiste ma è senza documenti e potrebbe essere modificato in una versione futura.

Stato di Win non squilla un campanello, come si usa? C'è probabilmente un nuovo modo per realizzarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top