c++ - Mit Visual Studio 2005 für Windows NT 4.0 erstellen?

Translate

Eine MFC-Anwendung, die ich migrieren möchte, verwendetafxext.h, was verursacht_AFXDLLgesetzt zu werden, was diesen Fehler verursacht, wenn ich setze/MT:

Bitte verwenden Sie den Schalter / MD für _AFXDLL-Builds

Meine bisherigen Untersuchungen haben ergeben, dass es unmöglich ist, eine Anwendung für die Ausführung unter Windows NT 4.0 mit Visual Studio (in diesem Fall C ++) 2005 zu erstellen.

Ist das wirklich wahr? Gibt es eine Problemumgehung?

This question and all comments follow the "Attribution Required."

Alle Antworten

Hugo Lee
Translate

Nein, es gibt viele mit VS2005 erstellte Anwendungen, die Windows XP, 2000, NT und den gesamten Stack unterstützen müssen. Das Problem ist, dass VS2005 (standardmäßig) Bibliotheken / Exporte verwenden möchte, die unter NT nicht vorhanden sind.

Sehendieser Threadfür einige Hintergrundinformationen.

Begrenzen Sie dann Ihre Abhängigkeiten über Präprozessor-Makros und vermeiden Sie APIs, die unter NT nicht unterstützt werden.

Quelle
Translate

Haben Sie versucht, die Einstellungen zu ändern, um MFC als statische Bibliothek anstelle einer DLL zu verwenden, um den Fehler _AFXDLL zu beseitigen? Dies ähnelt dem, was Sie bereits tun, um die Laufzeitbibliotheken auf statisch anstatt auf DLL zu ändern.

Quelle
Translate

Die Problemumgehung besteht darin, die Multithread-DLL zu reparieren.Einfache Anleitung. Kurze Zusammenfassung:

Die Versand-DLL für die 8.0 C-Laufzeitbibliothek (MSVCR80.DLL) unterstützt NT 4.0 SP6 aus einem Grund und nur aus einem Grund nicht: Jemand von Microsoft hat einen Funktionsaufruf hinzugefügtGetLongPathNameWdie in kernel32.dll unter NT 4.0 nicht existiert.

CRTLIB.C In Zeile 577 wird angerufenGetLongPathNameW. Ersetzen Sie es einfach durch:ret = 0;Verwenden Sie diesen Build von MSVCR80.DLL nur unter NT 4.0.

Sobald diese funktionieren, sollte es trivial sein, eine allgemeinere Lösung zu finden.

Quelle
Translate

Obwohl ich mit afxext.h nicht vertraut bin, frage ich mich, warum es damit nicht mit Windows NT4 kompatibel ist.

Um jedoch die ursprüngliche Frage zu beantworten: "Meine bisherigen Untersuchungen zeigen, dass es unmöglich ist, eine Anwendung für die Ausführung unter Windows NT 4.0 mit Visual Studio (in diesem Fall C ++) 2005 zu erstellen."

Die Antwort sollte ja sein, insbesondere wenn die Anwendung ursprünglich geschrieben wurde oder auf NT4 läuft! Abgesehen von afxext.h sollte dies ein einfaches JA sein.

Die andere Sache, mit der ich Probleme habe, ist die lockere Natur, in der die Leute den NT-Begriff wegwerfen. Zugegeben, die meisten Leute denken an "NT" als Windows NT4, aber es ist immer noch nicht eindeutig, weil "die meisten Leute" nicht gleich "alle Leute" sind.

In Wirklichkeit entspricht der Begriff "NT" der NT-Serie. Die NT-Serie ist NT3, NT4, NT5 (2000, XP, 2003) und NT6 (Vista).

Win32 ist ein Subsystem, auf das Sie auch Ihren C / C ++ - Code abzielen. Daher sehe ich keinen Grund, warum man nicht in der Lage sein sollte, auf diese NT4-Plattform und dieses NT4-Subsystem abzuzielen, oder, wenn dies eine Übung zur Plattformportierung ist, die MFC-Abhängigkeiten zu entfernen, die VC möglicherweise auferlegt.

Wenn ich die Datei afxext.h zum Mix hinzufüge, klingt dies für mich nach einem Kompatibilitätsproblem mit dem Subsystem. Es ist Teil von MFC aus meiner Google-Forschung. Die Datei afxext.h scheint die MFC-Erweiterung (Microsoft Foundation Class) zu sein.

Können Sie Ihre Abhängigkeit von MFC entfernen? Um welche Art von Anwendung handelt es sich? (CLR, Service, GUI-Schnittstelle?) Können Sie ein Projekt in VC 8.0 in ein nicht verwaltetes C ++ - Projekt konvertieren?

Hoffentlich hilft Ihnen einiges davon weiter.

Quelle
Maxwell Lee
Translate

Die Idee ist, dass die exe benötigt wird, um eine Verbindung zur statischen Bibliothek herzustellen.

Bitte versuchen Sie diese "Konfigurationseigenschaften", "Allgemein", "Verwendung von MFC", um "MFC in einer statischen Bibliothek zu verwenden", "Konfigurationseigenschaften", "Allgemein", "Verwendung von ATL", um "Statische Verbindung zu ATL" herzustellen.

"Konfigurationseigenschaften", "C \ C ++", "Codegenerierung", "Laufzeitbibliothek" bis "Multithreaded (\ MT)"

Testplattform-Build-Computer: Visual Studio 2005 auf Windows XP SP2-Client-Computer: Windows XP SP2 (kein VS2005 installiert)

Quelle