Question

Est-il possible d'utiliser une bibliothèque statique C de (.lib) compilé en utilisant Visual Studio 6 dans Visual Studio 2008?

Était-ce utile?

La solution

Je ne devrais pas penser pourquoi pas - aussi longtemps que vous gardez les limites de mémoire CRT habituels (si vous allouez de la mémoire dans une fonction de bibliothèque, toujours libre de l'intérieur de la bibliothèque - en appelant une fonction dans le répertoire lib pour faire le libération).

cette approche fonctionne très bien pour les DLLs compilées avec toutes sortes de compilateurs, libs liés statiquement devrait être ok aussi.

Autres conseils

Cela dépend vraiment. La lib expose que « extern « C » » fonctions où la mémoire est soit gérée par des méthodes Win32 droites (CoTaskMemAlloc, etc.) ou l'appelant ne libère la mémoire allouée par le ou vice-callee versa? Comptez-vous que sur les bibliothèques de base qui n'ont pas beaucoup changé depuis VS 6? Si oui, vous devriez être bien.

Il y a 2 choses de base à surveiller. Les modifications apportées aux variables globales utilisées par les bibliothèques 3 parties, et des changements à la structure de struct, des classes, etc. définies par les bibliothèques 3 parties. Par exemple, l'allocateur de mémoire CRT a probablement changé ses structures de gestion d'allocation cachées entre les 2 versions, afin d'avoir une version de la bibliothèque de allouer une portion mémoire et ayant une autre libre, il va probablement provoquer un plantage.

Comme autre exemple, si vous exposiez classes C ++ via l'interface et sur lesquels ils comptent sur les bibliothèques d'exécution MS comme MFC, il y a une chance que la mise en page de classe a changé entre VS 6 et VS 2008. Cela signifie que l'accès à un membre / champ sur la classe pourrait aller à la mauvaise chose et provoquer des résultats imprévisibles. Vous êtes probablement bloqué, si le MFC utilise .lib en toute capacité. MFC définit et utilise en interne des tonnes de globals, et tout accès aux MFC par les opérations globales du .lib pourrait provoquer des défaillances si l'infrastructure MFC a changé dans l'environnement d'hébergement (il a beaucoup changé depuis VS 6, BTW).

Je n'ai pas exploré exactement quels changements ont été effectués dans les en-têtes MFC, mais je l'ai vu un comportement imprévisible entre les binaires de classe MFC / ATL compilées dans VS différentes versions.

En plus de ces questions, il y a un risque pour des fonctions comme strtok () qui reposent sur des variables globales statiques définies dans les bibliothèques d'exécution. Je ne suis pas sûr, mais je suis préoccupé par les variables statiques ne peuvent pas initialisés correctement si vous utilisez un client attend le CRT monothread sur un fil créé sur le tube cathodique multi-thread. Regardez la documentation _beginthread () pour plus d'informations.

Oui. Il devrait y avoir aucun problème avec du tout. Comme gbjbaanb mentionné, vous devez penser à votre mémoire, mais VS2008 sera toujours travailler avec elle. Tant que vous essayez de ne pas mélanger le code CLR, (géré) avec elle. Je recommande que contre si possible. Mais, si vous parlez de C brut ou code C ++, bien sûr, ça va marcher.

Qu'est-ce que vous prévoyez d'utiliser exactement? (Qu'est-ce que dans cette bibliothèque?) Avez-vous déjà essayé, mais vous avez des questions, ou êtes-vous en train de vérifier avant de perdre un tas de temps à essayer de faire fonctionner quelque chose que juste ne?

Bien sûr que ça va marcher.

Demandez-vous où en VS2008 pour coder les références?

Si oui, allez à proj accessoires -> Linker -> Entrée sur les propriétés de configuration sur les pages de propriétés. Recherchez « dépendances supplémentaires » et le code du .LIB il.

Aller à proj accessoires -> Linker -.> Général et le code le chemin libs dans "Annuaires de bibliothèque supplémentaires"

Cela devrait le faire !!

Il y a des cas étaient la réponse est non, quand nous sommes passés de VS6 à VS2k5 nous avons dû reconstruire toutes nos bibliothèques, comme le modèle de la mémoire a changé, et les fonctions CRT où différentes.

Il y avait quelques changements entre VC6 rupture, VS2003, VS2005 et VS2008. Visual C ++ (en VS2005) arrêté support pour la bibliothèque CRT, lié statiquement seul thread. Certains changements énumérés et ici . Ces changements auront un impact sur votre utilisation de VC6 construit libs dans les versions ultérieures.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top