Aller au contenu

Mise à jour application C#


Messages recommandés

Salut je prends la place d'un collègue qui a bien voulu me prêter sa session. Je développe en C# et j'ai une application qui me permet d'ouvrir un fichier Autocad, mais seulement sur la version 2010. Mon but est de mettre à jour mon application C# afin de pouvoir ouvrir ce fichier avec Autocad 2016.

J'ai rajouté les dll suivantes: accoremgd, acdbmgd, et acmgd. Je laisse en pièce jointes le projet.

Je ne sais pas ce qui remplace AcadApplication et AcadDocument dans la version 2016.

Mon pseudo c'est Boris Dagnon.

 

Dans mon fichier Doc.cs

 

using Autodesk.AutoCAD.Interop;

using Autodesk.AutoCAD.Interop.Common;

using GetPointCoord;

using Microsoft.VisualBasic;

using System;

using System.IO;

using System.Runtime.InteropServices;

using System.Windows.Forms;

 

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.Runtime;

 

 

 

 

namespace Traceur

{

public class Doc

{

 

 

private AcadApplication acApp;

private AcadDocument acDoc;

 

public Doc(AcadApplication acApp)

{

this.acApp = acApp;

}

 

[DllImport("user32.dll", SetLastError = true)]

private static extern int BringWindowToTop(IntPtr hWnd);

 

public bool Ouvrir()

{

try

{

 

 

 

if (this.acApp.Documents.Count != 0) //Compte si il y a un document déjà ouvert

{

int num = (int) MessageBox.Show("Un document AutoCAD est déjà ouvert. Veuillez le fermer avant d'ouvrir un autre document.", "Erreur d'ouverture", MessageBoxButtons.OK, MessageBoxIcon.Hand);

return false;

}

OpenFileDialog openFileDialog = new OpenFileDialog();

int num1 = (int) openFileDialog.ShowDialog();

 

this.acDoc = this.acApp.Documents.Open(openFileDialog.FileName.ToString(), (object) false, (object) "");

this.VerifCalque();

this.acApp.Height = Screen.PrimaryScreen.WorkingArea.Height;

this.acApp.Width = Screen.PrimaryScreen.WorkingArea.Width - 144;

this.acApp.WindowTop = 0;

this.acApp.WindowLeft = 144;

this.acApp.Visible = true;

this.acDoc.SelectionSets.Add("JFC_SSET");

this.VerifEchelle();

 

return true;

}

catch (System.Exception ex)

{

int num = (int) MessageBox.Show(ex.Message);

return false;

}

}

 

Dans mon fichier Form1.cs

 

public void InitializeInstance()

{

this.acApp = new AcadApplicationClass();

this.instDoc = new Doc((AcadApplication) this.acApp);

}

 

Je vous donne aussi mon github: https://github.com/borisdagnon/CESBRON/tree/master/Traceur

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

D'après ce que je vois, tu n'utilises que l'interface COM, tu n'as donc pas besoin des bibliothèques .NET (AcCore.dll, AcDbMgd.dll et AcMgd.dll).

Par contre, il faut référencer le bibliothèques COM (Autodesk.AutoCAD.Interop et Autodesk.AutoCAD.Interop.Common) correspondant à la version ciblée (AutoCAD 2016 32 ou 64 bits). Tu devrais trouver ces DLLs dans le répertoire d'installation d'AutCAD 2016 ou, mieux, dans ObjectARX 2016\inc-x64 (pour AutoCAD 64 bits) ou ObjectARX 2016\inc-win32 (pour AutoCAD 32 bits).

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Merci pour la réponse je vais voir ça rapidement et je te tiens au courant. Je vais supprimer les références au .NET.

Du coup tu pense que se seront les mêmes procédures et fonctions ou bien qu'il faudra tout réadapter ?

:rolleyes:

J'ai une erreur, je comprend pas pourquoi il me parle de conversion.

post-37801-0-58585200-1452155125_thumb.png

post-37801-0-01519600-1452155132_thumb.png

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

La ligne de code que tu montres est assez incompréhensible pour moi.

new GetPointCoord.GetPointCoord().GetPoint(this.acDoc, ref objArray1[0], ref objArray1[1]);

 

On dirait que tu as quelque part une classe GetPointCoord (dont on ne sait rien) avec une méthode statique GetPointCoord() (dont on ne sait rien non plus) qui retourne un objet d'un type qui as une méthode GetPoint() (dont on peut juste déduire qu'elle renseigne des coordonnées x et y).

 

Je serais tenté de dire que le problème vient de GetPointCoord.

 

PS: je ne comprends pas l'utilité du "new" au début de la ligne...

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

Lien vers le commentaire
Partager sur d’autres sites

Si ton projet utilise (référence) des bibliothèques extérieures (comme ça semble être le cas pour GetPointCoord), ces bibliothèques doivent aussi être compilées avec les versions 2016 des bibliothèques COM d'AutoCAD (Autodesk.AutoCAD.Interop et Autodesk.AutoCAD.Interop.Common).

  • Upvote 1

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

Lien vers le commentaire
Partager sur d’autres sites

GetPointCoord est une bibliothèque que je charge dans mon application.

J'ai une gros souci quand à GetPointCoord puisque je ne sais pas si il existe une version pour autocad 2016 ou bien si c'est une bibliothèque par défaut.

The best overloaded method match for 'GetPointCoord.GetPointCoord.GetPoint(Autodesk.AutoCAD.Interop.AcadDocument, ref object, ref object)' has some invalid arguments H:\CESBRON\Traceur\Doc.cs 201 7 Traceur

post-37801-0-24816100-1452174599_thumb.png

Lien vers le commentaire
Partager sur d’autres sites

Comme je te l'ai dit ici et sur le forum Autodesk, tes erreurs semblent dues à un problème de compatibilité.

 

Il faut que les versions (version d'AutoCAD et plateforme 32 ou 64 bits) de toutes les bibliothèques référencées par ton projet correspondent à la version d'AutoCAD que tu cibles (celle dans laquelle tu charges et exécutes ton projet).

 

Je ne sais pas ce que tu appelles "bibliothèque par défaut", mais vue la façon dont tu l'appelles, c'est une bibliothèque qui utilises aussi l'interface COM, il faut donc aussi la recompiler en référençant les bibliothèques de la bonne version.

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

Lien vers le commentaire
Partager sur d’autres sites

C'est bon j'ai fait ce que tu as dit, je n'avais pas comprit :-D

J'ai décompilé les deux bibliothèques : GetPointCoord.dll et DLLSelectionSet.dll et j'ai remplacé les références de Autodesk.AutoCAD.Interop et Autodesk.AutoCAD.Interop.Common. Puis ensuite j'i recompilé les deux dll.

Après cela je suis allé dans mon programme Traceur pour référencer les deux dll recompilés.

Merci gile je n'avais rien comprit quand tu m'as donné la solution.

Lien vers le commentaire
Partager sur d’autres sites

Je suis content que tu aies réussi, même si je pense que la manière dont tu procèdes (décompiler/recompiler des bibliothèques tierces sans te préoccuper du code qu'elles contiennent) n'est ni très sûre, ni forcément très légale (vis à vis de l'auteur de ces bibliothèques).

 

PS: tu peux accepter comme solution la réponse que je t'ai donné sur le forum Autodesk.

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

Lien vers le commentaire
Partager sur d’autres sites

Salut c'est mon vrai compte ça, j'utilisais le compte d'un ami qui m'avais conseillé d'utiliser le tien car mon projet étais important. Excusez moi :-D Je voudrais vous remercié pour votre aide :-D.

Du coup je ne sais pas comment j'aurai du faire pour ne pas avoir à décomplier et recompiler les deux dll ?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Personnellement, je n'utilise pas de bibliothèque tierce dont je ne suis pas certain de la fiabilité (ce qui suppose de connaître l'auteur et/ou d'avoir accès au code source) et des droits que j'ai de l'utiliser (ce qui là encore suppose de connaitre l'auteur).

 

Je développe en C# et j'ai une application qui me permet d'ouvrir un fichier Autocad

Tu as bien dû trouver ces DLLs quelque part quand tu as écrit ton application...

À moins que pour l'application aussi, tu ne te sois contenté de décompiler un assemblage (ce que laisse penser les commentaires dans ce que tu as posté sur Github).

 

Si c'était le cas, ce que tu fais s'apparenterait plus à du piratage qu'a du développement et je serais moins certain d'être content de t'avoir aidé...

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

 

@(gile)

Je me permes d'intervenir dans la discussion même si je ne connais rien au .NET

Boris a commencé son stage dans notre société Lundi.

Je précise que je suis pas directement le projet Boris.

Boris travaille sur un additif à Autocad développé en interne il y a près de 10ans. Sa première mission est de le remettre à jour sur les nouvelles versions d'Autocad puis de faire certaines améliorations.

Voilà ce qui explique les décompilations recompilations de bibliothèques sur un programme qu'il ne maîtrise pas.

A+

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

OK.

 

Normalement, si le programme a été développé en interne (c'est à dire par un développeur salarié de l'entreprise), c'est l'entreprise qui est propriétaire du code. Le développeur aurait donc dû fournir aussi les code source ce qui éviterait d'avoir à décompiler les assemblages.

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

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é