Frage

Eine MFC-Anwendung, die ich versuche zu migrieren verwendet afxext.h, wodurch _AFXDLL um festzulegen, welche Ursachen dieser Fehler wenn ich /MT:

Bitte verwenden Sie die Schalter /MD für _AFXDLL baut

Meine Forschung zeigt bis jetzt, dass es unmöglich ist, eine Anwendung zu erstellen, die für die Ausführung auf Windows NT 4.0 mit Visual Studio (C++, in diesem Fall) 2005.

Ist das wirklich wahr?Gibt es irgendeinen workaround?

Keine korrekte Lösung

Andere Tipps

Nein, es gibt viele Anwendungen, die mit VS2005, die für die Unterstützung von Windows XP, 2000, NT, den ganzen Stapel.Das Problem ist, dass (standardmäßig) VS2005 verwenden möchte libraries/Exporte nicht auf NT.

Finden dieser thread für einige Hintergrundinformationen.

Starten Sie dann die Begrenzung Ihrer Abhängigkeiten über Präprozessor-Makros, und die Vermeidung von APIs, die sind nicht unterstützt auf Windows NT.

Um loszuwerden, die _AFXDLL Fehler, haben Sie versucht, die änderung der Einstellungen zu verwenden MFC als statische lib anstelle einer DLL?Dies ist ähnlich zu dem, was Sie bereits tun, ändern der runtime-libs statisch anstelle von DLL.

Die Problemumgehung ist zu beheben die multi-threaded-DLL. Einfache Anweisungen.Kurze Zusammenfassung:

Der Versand 8.0 C Runtime Library DLL (MSVCR80.DLL) nicht unterstützt NT 4.0 SP6-aus einem Grund und nur einem Grund:jemand bei Microsoft Hinzugefügt eine Funktion aufrufen, um GetLongPathNameW was es nicht gibt, in kernel32.dll für NT 4.0.

CRTLIB.C On line 577, es ist ein Aufruf an GetLongPathNameW.einfach ersetzen Sie es mit: ret = 0; verwenden Sie nur diese-build MSVCR80.DLL auf NT 4.0.

Sobald Sie haben diese arbeiten, kommen mit eine allgemeinere Lösung sollte trivial sein.

Obwohl ich bin nicht vertraut mit afxext.h, Frage ich mich, was es macht, ist es nicht kompatibel mit Windows NT4....

Jedoch, eine Antwort auf die ursprüngliche Frage:"Meine Forschung zeigt bis jetzt, dass es unmöglich ist, eine Anwendung zu erstellen, die für die Ausführung auf Windows NT 4.0 mit Visual Studio (C++, in diesem Fall), 2005."

Die Antwort sollte ja sein, insbesondere, wenn Anwendung wurde ursprünglich geschrieben, oder läuft auf NT4!Mit der afxext.h Ding beiseite, sollte dies ein leichtes sein, JA.

Die andere Sache, die ich finden, Schwierigkeiten mit der lockeren Art, in der die Menschen werfen sich die NT-Begriff.Erteilt die meisten Leute denken, 'NT', wie Windows NT4, aber es ist noch unklar, weil 'die meisten Menschen' ist nicht gleich 'alle Menschen.'

In der Realität ist der Begriff 'NT' ist gleich der NT-Serie.Die NT-Serie ist NT3, NT4, NT5 (2000, XP, 2003) und NT6 (Vista).

Win32-ist ein Teilsystem, die Sie gezielt in Ihre C/C++ - code zu.Also ich sehe keinen Grund, warum sollte man nicht in der Lage sein, den Gegner diese NT4 platform & subsystem oder, wenn es ist eine Plattform portieren excercise, entfernen Sie das MFC-Abhängigkeiten, die VC ist möglicherweise auferlegen.

Das hinzufügen des afxext.h, um den mix, es klingt für mich wie ein subsystem Kompatibilität Problem.Es ist Teil des MFC aus meiner Google-recherche.Die afxext.h erscheint die MFC (Microsoft Foundation Class) - Erweiterungen.

Können Sie entfernen Ihre Abhängigkeit von MFC?Welche Art von Anwendung ist das?(CLR, service, GUI-Schnittstelle?) Können Sie konvertieren Sie ein Projekt auf eine nicht verwaltete C++ - Projekt in VC 8.0?

Hoffentlich einige dieser hilft Ihnen weiter.

Die Idee ist, dass die exe-Datei wird benötigt, um link, um die statische Bibliothek.

Bitte versuchen Sie dies "Konfiguration " Eigenschaften", "allgemein", "Verwendung von MFC" auf "Use MFC in einer Statischen Bibliothek" "Konfiguration " Eigenschaften", "allgemein", "Benutzung " ATL" auf "Static Link zur ATL"

"Configuration Properties", " - C\C++", "Code Generation", "Runtime Library" auf "Multi-Threaded (\MT)"

Test Platform Build-Maschine:Visual Studio 2005 unter Windows XP SP2 Client Machine:Fenster XP SP2 (keine VS2005 installiert)

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