2010-04-19 6 views
16

J'ai une DLL très simple écrite en C++ non géré et accessible depuis mon application. Je suis récemment passé à Visual Studio 2010, et la DLL est passée de 55k à 35k sans modifications de code, et maintenant il ne sera plus chargé dans Windows 2000. Je n'ai pas modifié les paramètres du code ou du compilateur. J'ai ma configuration définit pour 0x0500, qui devrait inclure le support de Windows 2000. Quelqu'un d'autre a-t-il déjà rencontré cela ou a-t-il des idées sur ce que je peux faire?Problème lors de l'utilisation de DLL C++ compilée Visual Studio 2010 dans Windows 2000

+0

duplication possible de [Puis-je utiliser le compilateur C++ de Visual Studio 2010 avec C++ Runtime Library de Visual Studio 2008?] (Http://stackoverflow.com/questions/2484511/can-i-use-visual-studio-2010s-c -compiler-with-visual-studio-2008s-c-runtime) – Suma

Répondre

12

Visual Studio 2010 cannot build binaries that run on Windows 2000. C'est en fait encore pire que ça, they won't run on Windows XP RTM or Windows XP Service Pack 1 either. En effet, la bibliothèque d'exécution C de VS2010 nécessite l'API EncodePointer qui n'est pas disponible avant le SP2.

Il semble que vous soyez bloqué avec l'installation de VS2008 si vous voulez prendre en charge les versions antérieures de Windows. Vous pouvez déplacer votre projet entier vers Visual Studio 2008 ou vous pouvez cibler le jeu d'outils vc90 (Visual Studio 2008) à partir de vos projets Visual Studio 2010. Pour plus de détails sur cette dernière méthode, voir cette réponse à ma question connexe here.

+0

Merci pour le lien, c'est une nouvelle malheureuse. :( –

+0

@Jon Tackabury: Je sais - je voudrais vraiment utiliser 'auto' :( –

+0

Je ne veux pas avoir VS 2008 et 2010 à la fois installé. :( –

5

La solution est probablement de fournir EncodePointer (et DecodePointer, évidemment) dans une bibliothèque séparée, et un lien qui préférentiellement à KERNEL32.LIB. C'est un scénario parfaitement supporté. Dans le passé, les libs comme "LIBCTINY" et "UNICOWS" ont utilisé ce mécanisme de lien préférentiel pour ajouter/remplacer des fonctions sélectionnées mais pas toutes d'une autre lib.

+0

Exactement.Malheureusement, je n'ai pas voir votre réponse avant d'écrire mon propre dans le sujet lié, sinon je ne passerais pas beaucoup de temps exp ériment avec elle. Cependant, comme ma réponse contient du code prêt à l'emploi et testé, j'espère que ce sera utile - voir http://stackoverflow.com/questions/2484511/can-i-use-visual-studio-2010s-c-compiler -with-visual-studio-2008s-c-runtime/3502056 # 3502056 – Suma

+0

Une note d'implémentation importante: vous ne fournissez pas EncodePointer/DecodePointer (les fonctions de DLL) directement. Vous devez remplacer leurs vecteurs d'importation, ce qui est résolu lors de l'utilisation de .lib. Ils sont appelés comme _imp__FunctionName. – Suma

Questions connexes