2010-04-19 2 views
16

Ich habe eine sehr einfache DLL geschrieben in nicht verwalteten C++, die ich von meiner Anwendung aus zugreifen. Ich habe vor kurzem zu Visual Studio 2010 gewechselt, und die DLL ging von 55k auf 35k ohne Codeänderungen, und jetzt wird sie nicht mehr in Windows 2000 geladen. Ich habe keinen Code oder Compilereinstellungen geändert. Ich habe meine definiert Setup für 0x0500, die Windows 2000-Unterstützung enthalten sollte. Ist jemand anderes dazu gekommen, oder haben Sie irgendwelche Ideen, was ich tun kann?Problem mit Visual Studio 2010 kompilierte C++ - DLL in Windows 2000

+0

mögliche Duplikate von [Kann ich den C++ - Compiler von Visual Studio 2010 mit der C++ - Laufzeitbibliothek von Visual Studio 2008 verwenden?] (Http://stackoverflow.com/questions/2484511/cani-i-use-visual-studio-2010s-c -compiler-with-visual-studio-2008s-c-laufzeit) – Suma

Antwort

12

Visual Studio 2010 cannot build binaries that run on Windows 2000. Es ist sogar noch schlimmer, they won't run on Windows XP RTM or Windows XP Service Pack 1 either. Dies liegt daran, dass die C-Laufzeitbibliothek von VS2010 die EncodePointer-API benötigt, die erst ab SP2 verfügbar ist.

Es scheint, dass Sie bei der Installation von VS2008 nicht weiter arbeiten können, wenn Sie frühere Versionen von Windows unterstützen möchten. Sie können entweder Ihr gesamtes Projekt nach Visual Studio 2008 verschieben oder Sie können das vc90 (Visual Studio 2008) -Toolset in Ihren Visual Studio 2010-Projekten anvisieren. Für weitere Details zu der letzteren Methode, siehe diese Frage zu meiner verwandten Frage here.

+0

Danke für den Link, das sind einige unglückliche Nachrichten. :( –

+0

@ Jon Tackabury: Ich weiß - ich möchte wirklich 'auto' verwenden :( –

+0

Ich möchte nicht VS 2008 und 2010 beide installiert haben. :( –

5

Die Lösung besteht wahrscheinlich darin, EncodePointer (und decodePointer, offensichtlich) in einer separaten lib bereitzustellen und diese vorzugsweise mit KERNEL32.LIB zu verknüpfen. Dies ist ein perfekt unterstütztes Szenario. In der Vergangenheit haben Bibliotheken wie "LIBCTINY" und "UNICOWS" diesen bevorzugten Verknüpfungsmechanismus verwendet, um ausgewählte, aber nicht alle Funktionen aus einer anderen Bibliothek hinzuzufügen/zu ersetzen.

+0

Genau, leider habe ich nicht Sehen Sie Ihre Antwort, bevor Sie meine eigene in dem verknüpften Thema schreiben, sonst würde ich nicht so viel Zeit exp verbringen Ertrinken damit. Dennoch, da meine Antwort gebrauchsfertigen und getesteten Code enthält, hoffe ich, dass es nützlich sein könnte - siehe http://stackoverflow.com/questions/2484511/cani-i-use-visual-studio-2010s-c-compiler -with-visual-studio-2008s-c-runtime/3502056 # 3502056 – Suma

+0

Ein wichtiger Hinweis zur Implementierung: Sie stellen den EncodePointer/DecodePointer (die Funktionen von DLL) nicht direkt zur Verfügung. Sie müssen ihre Importvektoren ersetzen, was beim Lösen von .lib gelöst wird. Sie werden wie _imp__FunctionName aufgerufen. – Suma

Verwandte Themen