Question

Je l'ai mis à jour avec succès une application MFC qui a été compilé avec une ancienne version de Developer Studio à Visual Studio 2008. Un très petit nombre de changements ont été nécessaires en raison de certains changements de rupture dans MFC. Maintenant que tout fonctionne, je voudrais passer à l'étape suivante et de compiler la solution avec /clr.

Pour ce faire, j'ai trouvé des informations utiles sur le site Web MSDN:

Voici les étapes que j'ai prises:

  1. Définissez le Runtime Library débogage DLL (/ MDd) multi-thread .
  2. Régler la Utilisation du MFC Utiliser les MFC dans une DLL partagée .

Cependant, cela me empêche de relier le projet:

  1. La référence à afxData ne peut plus être résolu; en quelque sorte, afxData est visible lors de la liaison statique contre MFC. Dans mon code, j'ai la déclaration suivante:

    extern AFX_DATA AUX_DATA afxData;

    qui fonctionne très bien avec la version MFC liée de manière statique.

  2. Les références à _afxThreadState et _afxWinState ne peuvent être résolus non plus.

Voici les messages d'erreur complète:

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)

dans le cas où cela pourrait être lié au nom mutiler ...

Alors, que puis-je faire pour créer un lien dynamique contre MFC, mais toujours en mesure d'afxData, _afxThreadState et _afxWinState?

Était-ce utile?

La solution

Lorsque vous utilisez MFC dans une DLL partagée, AUX_DATA doit être dllimported.

extern __declspec(dllimport) AUX_DATA afxData

Pour l'état de fil, plutôt que d'utiliser les classes de modèle, utilisez un de ces

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

Selon les informations d'état dont vous avez besoin. Par exemple, voir pour certains membres qui ont été transférés au module état pour corriger un bug. Notez que existe AfxGetModuleThreadState mais non documentée et pourrait être modifié dans une version future.

Win Etat ne sonne pas une cloche, comment est-il utilisé? Il y a probablement une nouvelle façon de l'accomplir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top