Aller au contenu

Questions sur la compatibilité entre les versions


krunch

Messages recommandés

Bonjour, c'est des questions générales et pratiques ..

 

- Etant donné que la version de objetctARX doit correspondre au Framework, est ce que je dois avoir un ACad2013 pour faire un .dll qui marche sur ACad2013 (là j'ai un 2010) ?

Si non je dois installer les objectARX et le Framework correspondant ?

 

- Apparemment il y a des évolutions tous les 3ans .. donc il faudra faire une nouvelle dll tous les 3 ans ?

 

- Actuellement il faut faire plusieurs .dll selon la version, ensuite comment on teste la version en Lisp pour le Netload (avec ver ?) ?

Cette question est pour le cas où on mixe avec du Lisp, même si j'ai bien compris que c'était pas l'idéal ..

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Avec .NET, il y a une volonté d'amélioration de la compatibilité par rapport aux langages plus bas niveau comme C/C++. Le même code peut s'exécuter indifféremment sur des systèmes 32 ou 64 bits voire même indépendamment du système d'exploitation (y compris et UNIX, Mac OS avec le projet Mono).

Dans le même esprit, chaque version du Framework tente de n'être qu'une couche ajouté à la version précédente sans rendre celle-ci caduque.

Donc théoriquement, une application .NET écrite en ciblant le Framework 2.0 sur un système Windows XP 32 bits fonctionnera sans problème sur sur Windows 7 64 bits (qui installe le Framework 3.5).

 

En ce qui concerne l'API AutoCAD, la compatibilité ascendante fonctionne relativement bien entre les versions 2007 à 2012 (j'ai cependant noté un changement dans une classe avec A2010 qui nécessitait de compiler 2 versions). Ce qui veut dire qu'une application développée pour AutoCAD 2007 en ciblant le Framework 2.0 fonctionnera pour toutes les versions jusqu'à 2012 dans l'immense majorité des cas.

 

Avec AutoCAD 2013, on a, pour la première fois, une réelle rupture dans la compatibilité des applications .NET. Ceci est dû à un changement important dans la structure même d'AutoCAD : le contenu du fichier AutoCAD.exe est désormais réparti entre deux fichiers : acad.exe et accore.dll.

Les applications .NET construites pour les versions antérieures ne sont donc plus compatibles avec 2013 et une application développé pour AutoCAD 2013 (qui doit référencer les nouvelles bibliothèques AcCoreMgd.dll, AcDbMgd.dll et AcMgd.dll et cibler le Framework 4.0) ne sera pas compatible avec les versions antérieures.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ok, oui c'est ce que tu as expliqué ici, donc continuité 2007-2012 (sauf pour 1 classe éventuelle) et 32-64bits.

 

Et pour ce qui de 2013 je peux toujours installer un Framework 4, télécharger ObjectARX2013, faire un nouveau modèle .. pour générer des dll 2013...

 

Mais en général au niveau du code est ce que les changements sont important ou c'est juste des adaptations ponctuelles sur certaines classes ?

Qu'est ce qui clocherait par exemple dans un highlight ?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Et pour ce qui de 2013 je peux toujours installer un Framework 4, télécharger ObjectARX2013, faire un nouveau modèle .. pour générer des dll 2013...

Si tu as installé Visual Studio 2010 ou 2012, le Framework 4 devrait être installé.

À priori tu devrais pouvoir le faire mais tu ne pourra pas déboguer.

Mais tu n'es pas obligé de créer une autre solution. Tu peux, dans ta solution ajouter un projet type "Bibliothèque de classe" (clic droit sur la solution dans l'explorateur de solution > ajouter > Nouveau projet) qui cible le Framework 4, dans le quel tu ajoutes les références à accoremgd.dll, acdbmgb.dll et acmgb.dll. Tu peux supprimer la classe générée automatiquement dans le projet. Tu fais un clic droit sur ton nouveau projet > Ajouter > Elements existants... et tu vas chercher les fichiers .cs dans le répertoire du projet 2010, tu les sélectionnes et tu déroules le bouton "Ajouter" pour choisir "Ajouter en tant que lien". Ainsi les modifications ultérieures apportés au code affecteront automatiquement les deux projets.

Tu essayes de compiler (F6) pour voir s'il y a un problème.

 

Mais en général au niveau du code est ce que les changements sont important ou c'est juste des adaptations ponctuelles sur certaines classes ?

Qu'est ce qui clocherait par exemple dans un highlight ?

Il y a quelques changements avec 2013, ils sont décris dans la doc d'ObjectARX 2013 > docs > arxmgd.chm > Migration Guide.

 

Pour Highlight, tu auras peut-être un avertissement ou une exception avec le constructeur de SubentityId pour lequel le type du second argument qui était Int64 (long) est considéré comme obsolète et doit être remplacé par un argument de type IntPtr. Il ne me semble pas me souvenir que la modification soit obligatoire pour pouvoir compiler (juste un avertissement) mais au cas où, pour pouvoir conserver le même code pour les deux projets, tu peux utilise la compilation conditionnelle.

Dans l'onglet Générer des propriétés du projet 2013, tu ajoutes un Symbole de compilation conditionnelle, par exemple ACAD_19 et dans le code tu ajoutes une expression de compilation conditionnelle (la première expression ne sera compilé que pour 2013, l'autre pour 2010 :

#if ACAD_19
                   SubentityId si = new SubentityId(SubentityType.Null, IntPtr.Zero);
#else
                   SubentityId si = new SubentityId(SubentityType.Null, 0);
#endif

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

D'accord, une solution peut contenir plusieurs projets...

 

Mais cette méthode est censée générer 1 seule .dll ou 2 ?

Là je n'en ai qu'1 (dans le Debug du projet de base, pas dans celui du nouveau) mais j'ai fait les choses à moitié, je n'ai pas branché (ni téléchargé) les nouvelles références.

 

Dernier truc : ACAD_19 est un symbole prédéfini pour la version dans ce cas ?

Lien vers le commentaire
Partager sur d’autres sites

Oui une solution peut contenir plusieurs projets et la génération de la solution devrait générer une DLL (ou exe) par projet chacun dans le répertoire de sortie de son projet (vérifier dans les propriétés de la solution > Propriétés de configuration que tous les projets sont bien cochés dans la colonne Générer).

 

Si tu n'as pas ajouté les références nécessaires à un projet, il ne compilera pas.

 

ACAD_19 est arbitraire, tu peux le remplacer par TOTO ou n'importe quoi d'autre. À la compilation, le compilateur ne compilera les expressions contenues dans le '#if TOTO ...' que pour le ou les projets ayant ce symbole de compilation défini dans leurs propriétés.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

D'accord compris, merci pour tes explications.

 

Pour en revenir à ma dernière question de base (cas d'un appel indirect par le Lisp) il ne reste donc plus qu'à déterminer la version pour faire un Netload sur la bonne .dll (hors modif majeure du .Net), avec si possible un test qui marche aussi avec les versions ultérieures à 2013.

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité