Aller au contenu

LispFunction


GEGEMATIC

Messages recommandés

Salut,

je reprend un projet .net, car je voulais ma faire une petite extension de findfile

qui accepte les joker

tout marche, sauf le LispFunction

       
<LispFunction("FindFilesLike")> _
Public Function FindFilesLike(ByVal Path As String, ByVal FilePattern As String, ByVal Mode As Integer) As ResultBuffer

 

A l'occasion, j'ai remarqué que tous mes lispfunction que j'avais, et qui marchais créent le même message d'erreur :


System.ArgumentException: Impossible d'établir une liaison avec la méthode 
cible, car sa signature ou sa transparence de sécurité n'est pas compatible 
avec celle du type délégué.
  à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo 
method, Boolean throwOnBindFailure)
  à System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo 
method)
  à Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object 
commandObject, Boolean bLispFunction)
  à 
Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo
mi, Object commandObject, Boolean bLispFunction)
  à Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, 
Boolean bLispFunction)
  à Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.InvokeLisp()
"Demande ADS erronée" 

 

Si qq a 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

La fonction ne doit prendre qu'un seul argument de type ResultBuffer :

 

<LispFunction("FindFilesLike")> _
Public Function FindFilesLike(ByVal args As ResultBuffer) As ResultBuffer

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

La fonction ne doit prendre qu'un seul argument de type ResultBuffer :

Salut

merci, c'était ça, et apparemment, elle doit au moins en comporter un

au passage je poste cette petite fonction, qui est bien utile pour moi

 

       'usage (FindFilesLike "Directory" "filepattern" "mode = TopDirectoryOnly or AllDirectories")
       'TopDirectoryOnly	Inclut uniquement le répertoire actif dans une recherche.
       'AllDirectories	Inclut le répertoire actif et tous les sous-répertoires dans une opération de recherche. Cette option inclut des points d'analyse tels que des lecteurs montés et des liens symboliques dans la recherche. 
       'exemple (FindFilesLike "C:\\MonChemin\\" "MonFichierN*.pdf" "TopDirectoryOnly")
	'retourne ("C:\\MonChemin\\MonFichierN1.pdf" "C:\\MonChemin\\MonFichierN2.pdf")
       <LispFunction("FindFilesLike")> _
       Public Function FindFilesLike(ByVal rbfArgs As ResultBuffer) As ResultBuffer
 
           Dim arInputArgs As Array
           Dim rbfResult As ResultBuffer

           Dim Mode As String
           Dim Path As String
           Dim FilePattern As String

           Dim filesFound As Array = Array.CreateInstance(GetType(String), 0)

           Dim FileDetails(0) As String

           arInputArgs = rbfArgs.AsArray

           Path = CType(arInputArgs.GetValue(0), TypedValue).Value
           FilePattern = CType(arInputArgs.GetValue(1), TypedValue).Value
           Mode = CType(arInputArgs.GetValue(2), TypedValue).Value


           If Mode = "AllDirectories" Then
               filesFound = System.IO.Directory.GetFiles(Path, FilePattern, IO.SearchOption.AllDirectories)
           ElseIf Mode = "TopDirectoryOnly" Then
               filesFound = System.IO.Directory.GetFiles(Path, FilePattern, IO.SearchOption.TopDirectoryOnly)
           Else
               MsgBox("Mode de recherche : " & Mode.ToString & " Inconnu")

           End If


           'Dim Nb As Integer = 0

           If filesFound.Length > 0 Then
               rbfResult = New ResultBuffer
               For Each oneFIle In filesFound
                   'Nb = Nb + 1
                    rbfResult.Add(New TypedValue(CInt(5005), oneFIle.ToString))
               Next
               Return rbfResult
           Else
               'les 2 suivant retourneront (nil)
               'rbfResult = New ResultBuffer(New TypedValue(CInt(LispDataType.Nil))) 
               'rbfResult.Add(New TypedValue(CInt(LispDataType.Nil)))
               'celui là retourne nil ...
               Return Nothing
           End If

       End Function

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

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

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é