Kompilieren MFC-Anwendung mit / clr (Schritt1: Verknüpfung gegen dynamischen DLLs)

StackOverflow https://stackoverflow.com/questions/914448

  •  06-09-2019
  •  | 
  •  

Frage

Ich habe erfolgreich eine MFC-Anwendung aktualisiert, die mit einer alten Version von Developer Studio zu Visual Studio 2008. Eine sehr kleine Anzahl von Änderungen aufgrund einiger Bruch Änderungen in MFC wurden benötigt kompiliert wurde. Nun, da alles funktioniert, ich möchte den nächsten Schritt nehmen und die Lösung mit /clr kompilieren.

Um dies zu tun, ich habe nützliche Informationen auf der MSDN-Website zu finden:

Hier sind die Schritte, die ich getroffen haben:

  1. Stellen Sie die Runtime Library Multi-Threaded Debug-DLL (/ MDD) .
  2. Stellen Sie die Verwendung von MFC Verwenden MFC in einer freigegebenen DLL .

Doch so hindert mich tun das Projekt von Verknüpfung:

  1. Der Verweis auf afxData nicht mehr gelöst werden kann; irgendwie ist afxData nur sichtbar, wenn statisch gegen MFC verknüpfen. In meinem Code habe ich die folgende Erklärung:

    extern AFX_DATA AUX_DATA afxData;

    , die mit der statisch verknüpften MFC-Version funktioniert gut.

  2. Die Verweise auf _afxThreadState und _afxWinState kann auch nicht gelöst werden.

Hier sind die vollständigen Fehlermeldungen:

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)

, falls dies könnte auf den Namen Mangeln in Beziehung gesetzt werden ...

So

Was kann ich tun, um dynamisch zu verknüpfen gegen MFC, aber immer noch Referenz afxData, _afxThreadState und _afxWinState?

War es hilfreich?

Lösung

Wenn MFC in einem gemeinsam genutzten DLL muss AUX_DATA dllimported werden.

extern __declspec(dllimport) AUX_DATA afxData

Für Thread-Zustand, sondern als Template-Klassen verwenden, eine davon verwenden

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

Je nach Zustand Informationen, die Sie benötigen. siehe zum Beispiel hier für einige Mitglieder, dass wurden bewegten Zustand Modul einen Fehler zu beheben. Beachten Sie, dass AfxGetModuleThreadState existiert, aber nicht dokumentiert und kann in einer zukünftigen Version geändert werden.

Win Zustand nicht klingelt eine Glocke, wie wird es genutzt? Wahrscheinlich gibt es eine neue Art und Weise zu erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top