GEGEMATIC Posté(e) le 10 décembre 2012 Posté(e) le 10 décembre 2012 Salut,j'ai besoin d'utiliser la methode SetIsFromOverlayReference(je pense qu'elle doit me permettre de changer le type de xref niveau/attacher) Pour info, le chemin de l'aide sur cette methode :ObjectARX Reference Guide > AcDb Classes > AcDbBlockTableRecord Class > AcDbBlockTableRecord Methods > AcDbBlockTableRecord::setIsFromOverlayReference Method Mon problème, c'est que je ne vois pas vraiment comment utiliser cette methode avec .net, bien que je pense que c'est possible. J'ai un exemple avec acedinvoke qui marche de 2 manières, avec entry point et sans.comment le savoir ? Ce que j'ai trouvé de plus intéressant sur le sujet (malheureusement pour moi en c, mais c'est pas grave) exemple call En copiant bêtement, je ferai çaPublic Class Xrefwork 'BlockTableRecord.SetIsFromOverlayReference <System.Security.SuppressUnmanagedCodeSecurity()> _ <DllImport("acad.exe", EntryPoint:="SetIsFromOverlayReference", _ CharSet:=CharSet.Unicode, CallingConvention:=CallingConvention.ThisCall)> _mais après, comment faire pour créer la methode SetIsFromOverlayReference de l'objet AcDbBlockTableRecord, qui n'est pas un objet à moi ... des idées ?merci,Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Maxence DELANNOY Posté(e) le 10 décembre 2012 Posté(e) le 10 décembre 2012 Sur AutoCAD 2013, la propriété BlockTableRecord.IsFromOverlayReference est en lecture/écriture, mais pas sur les versions antérieures. Tu dois spécifier le point d'entrée, car la casse de ta méthode est différente entre la version C++ (setIsFromOverlayReference) et ta version VB.NET (SetIsFromOverlayReference) et tu dois utiliser le nom décoré de la méthode (quelque chose comme "?setIsFromOverlayReference@@...". Voir http://through-the-interface.typepad.com/through_the_interface/2006/07/calling_objecta.html Ensuite je ne suis pas un expert du P/Invoke, mais je pense que tu dois créer une méthode statique (Shared en VB) qui prend en 1er argument un IntPtr et en 2ème un booléen. Pour l'appeler tu passes la propriété UnmanagedObject de ton objet BlockTableRecord en 1er argument. Maxence DELANNOYDéveloppement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAOWIIP - http://wiip.fr
GEGEMATIC Posté(e) le 10 décembre 2012 Auteur Posté(e) le 10 décembre 2012 Sur AutoCAD 2013, la propriété BlockTableRecord.IsFromOverlayReference est en lecture/écriture, mais pas sur les versions antérieures. Tu dois spécifier le point d'entrée, car la casse de ta méthode est différente entre la version C++ (setIsFromOverlayReference) et ta version VB.NET (SetIsFromOverlayReference) et tu dois utiliser le nom décoré de la méthode (quelque chose comme "?setIsFromOverlayReference@@...". Voir http://through-the-interface.typepad.com/through_the_interface/2006/07/calling_objecta.html Ensuite je ne suis pas un expert du P/Invoke, mais je pense que tu dois créer une méthode statique (Shared en VB) qui prend en 1er argument un IntPtr et en 2ème un booléen. Pour l'appeler tu passes la propriété UnmanagedObject de ton objet BlockTableRecord en 1er argument. salut,Merci de la réponse rapide, et tu confirme mes craintes, ça me fait trop de boulot pour le temps que je vais gagner... Mais comme je m'en servirais un jour, j'en profite pour m'éclairer : Dans le lien que j'ai mis, on vois bien que les methodes sont des static void, comme tu le dit, mais elles sont déclarées dans une structure, et non dans une classe: c'est important ? Pour les arguments, le intPtr représente l'adresse de l'objet xref, et le booléen la valeur oui/non Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Maxence DELANNOY Posté(e) le 10 décembre 2012 Posté(e) le 10 décembre 2012 Dans le lien que j'ai mis, on vois bien que les methodes sont des static void, comme tu le dit, mais elles sont déclarées dans une structure, et non dans une classe: c'est important ? Non, je ne pense pas. Pour les arguments, le intPtr représente l'adresse de l'objet xref, et le booléen la valeur oui/non Oui c'est ça. Maxence DELANNOYDéveloppement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAOWIIP - http://wiip.fr
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant