Aller au contenu

utilisation d'une methode non managée


GEGEMATIC

Messages recommandés

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 ça

Public 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.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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 DELANNOY

Développement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAO

WIIP - http://wiip.fr

Lien vers le commentaire
Partager sur d’autres sites

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.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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 DELANNOY

Développement de compléments aux logiciels Autodesk : AutoCAD, Revit, Inventor, Vault, Navisworks... et autres logiciels de CAO

WIIP - http://wiip.fr

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é