| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Prüfen welche Programme geladen sind (2145 mal gelesen)
|
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 07. Sep. 2009 18:58 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 07. Sep. 2009 19:07 <-- editieren / zitieren -->
Hi, nur, um den richtigen Weg einzuschlagen: was soll dann mit dieser Liste weiter gemacht werden? - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 07. Sep. 2009 19:19 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 07. Sep. 2009 21:30 <-- editieren / zitieren -->
Hi, also alles zusammen mit einem Modul fällt mir jetzt mal nicht ein, d.h. es wird wohl darauf hinauslaufen müssen, dass Du Typ für Typ überprüfst. Hier mal für ARX (Verweise zu den *mdg*.dll sowie zu den Standard COM-Verweisen ist dabei notwendig): Code: 'notwendig im Header: 'Imports Autodesk.AutoCAD'und dann in der Prozedur: Dim tAcadDoc as ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument 'dann auf COM-basiertes Application-Element zugreifen Dim tAcadAppCOM as Interop.AcadApplication = CType(tAcadDoc.AcadDocument, Interop.AcadDocument).Application 'und daraus kann jetzt gelistet werden, was sich ARX nennt: Dim tArxList As System.Array = CType(tAcadAppCOM.ListArx, System.Array)
Für die Prüfung, ob Lisp-Teile geladen sind, finde ich auf die schnelle nur diese Möglichkeit, sollte aber kein Problem sein, wenn bekannt ist, nach welchen defun's gesucht wird: Code:
If Autodesk.AutoCAD.Internal.Utils.IsLispCommandDefined("myTestLisp") Then Debug.Print("myTestLisp gefunden") Else Debug.Print("myTestLisp NICHT gefunden") End If
HTH, - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 08. Sep. 2009 18:46 <-- editieren / zitieren --> Unities abgeben:
Das untere Beispiel mit den Lisp-Routinen hört sich sehr gut an. Nur leider kann ich auf die Klasse Autodesk.AutoCAD.Internal nicht zugreifen, die scheint bei mir nicht vorhanden zu sein. Brauch ich dafür noch einen extra Verweis. Ich hab sowieso irgendwie den Eindruck das das alles irgendwie nicht richtig installiert ist, da mir die F1-Hilfe für die AutoCAD-Objekte fehlt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Sep. 2009 19:00 <-- editieren / zitieren -->
Hi, hast Du VisualStudio 2005 oder 2008? Mit 2005 wird das auch in der Hilfe nicht so funktionieren wie es z.B. in VBA gemacht wird (auf Objektdeklaration - Typ Maus draufstellen und <F1> ). Mit VS2008 und ObjectARX-Kit 2010 gibt's ein eigenes EXE, das erst die Help-Files so im VS hinein-konfiguriert, dass Du auch (zum Großteil) zu der AutoCAD-Objekt-Hilfe kommst. Zugegeben, das hab ich mit älteren ObjectARX-Kits nie gemacht aus Sorge, dass die VS-Installation darunter leidet. Die Help-Files hab ich im Windows auf einer Leiste, von der aus ich auch so schnell hinkomme, und in vielen Fällen reicht (mir) aber schon das Objektbrowser und die Funktionsdeklarationen. Sorry, ich vergaß bzgl. des Lisp-Teils: folgenden Verweis musst Du Deinem Projekt hinzufügen: acmgdinternal.dll ...zu finden in dem Installationsverzeichnis von AutoCAD (ich glaube aber erst ab 2009, ist aber nicht sicher). HTH, - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 08. Sep. 2009 19:54 <-- editieren / zitieren --> Unities abgeben:
Das Einbinden der Internal.dll hat ohne Probleme geklappt, allerdings bekomm ich den Aufruf nicht richtig hin. Wenn ich bspw. eine Lisp-Routine habe die mit 'txr' gestartet wird und auch funktioniert liefert er mir mit dem Code keine Messagebox Code: If (Autodesk.AutoCAD.Internal.Utils.IsLispCommandDefined("txr")) Then MsgBox("geladen") End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Sep. 2009 20:03 <-- editieren / zitieren -->
Hi, wenn Du den Befehl mit 'txr' startest, dann probier mal: If (Autodesk.AutoCAD.Internal.Utils.IsLispCommandDefined("C:txr")) Then - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 08. Sep. 2009 20:45 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank, hat hingehauen. Ich nutze VS2008 und ObjektARX2009, da ich vorerst bei AutoCAD 2009 bleiben will. In dem ObjektARX2009-Paket gibt es ein Doc-Verzeichnis mit ner Setup-Datei, allerdings war das schon installiert und bei Neuinstalltion bekomm ich auch keine F1-Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 08. Sep. 2009 20:53 <-- editieren / zitieren -->
Hi, >> hat hingehauen.Puuh, bin ich aber froh, weil ich's nur mit 2010 probiert hab. >> In dem ObjektARX2009-Paket gibt es ein Doc-Verzeichnis mit ner Setup-Datei, >> allerdings war das schon installiert und bei Neuinstalltion bekomm ich auch keine F1-Hilfe Für AutoCAD2009 war noch VS2005 empfohlen, da kann's durchaus sein, dass das Setup im Doc-Verzeichnis nicht richtig funkt. Und da bin ich leider auch nicht der richtige, um ev. dem VS2008 manuell die Verweise zu den Help-Doc's beizubringen, sorry. Mit 2010 hab ich's auch nur einmal probiert (mit Herzklopfen), jetzt hab ich das andere Problem, da ich abwechselnd Projekte bis hin zu 2008 zurück aktualisieren muss und gemischt Lib's zu AutoCAD, Map3D, Civil3D in den Verweisen zu führen habe, dass ich immer nur die Hilfe zu 2010 bekomme. Ist genauso Käse, darum ist mir die Variante lieber, ich hab die CHM-Dateien schnell (und selbst wählbar, welche Version) im Zugriff und verzichte auf den F1-Taste im VS. - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 11. Sep. 2009 18:36 <-- editieren / zitieren --> Unities abgeben:
Ich muss das Thema hier nochmal aufwärmen: Wenn ich meine eigenen DLL per netload aufrufe funktioniert der Test über Code: If (Autodesk.AutoCAD.Internal.Utils.IsLispCommandDefined("C:txr")) Then
ohne Probleme.Wenn ich jedoch das ganze über einen Registrywert laden will funktioniert es leider nicht und der Test gibt immer false zurück. Woran kann das liegen. Fehlt AutoCAD vielleicht die eine DLL die aus der Registry nicht richtig geladen wird?
Code: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7002:407\Applications\LaOs_AutoCAD_Werkzeuge] "DESCRIPTION"="LaOs AutoCAD Werkzeuge" "LOADCTRLS"=dword:00000002 "MANAGED"=dword:00000001 "LOADER"="M:\\ACAD\\Tools\\Dot-Net\\Aktuell\\LaOs_AutoCAD_Werkzeuge.dll"
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 11. Sep. 2009 19:54 <-- editieren / zitieren -->
Hi, ich hätte mal vermutet, dass AutoCAD mit dem Laden noch nicht fertig ist und ev. die Lisp's mit dem Laden noch gar nicht dran waren. Wobei: Laden des DLL's und Ausführen einer Funktion innerhalb des DLL's sind ja zwei verschiedene Sachen. Startest Du die Prüfung gleich beim Initialize des DLL's oder startest Du die Prüfung manuell, nachdem AutoCAD fertig mit 'Zeichnung 1' bereit ist? - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 12. Sep. 2009 08:37 <-- editieren / zitieren --> Unities abgeben:
manuel über den klick auf einen Button. Kann es sein, das ich den Verweis auf die DLL vielleicht falsch eingebunden habe oder sowas in der Art [Diese Nachricht wurde von Gloem am 12. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 12. Sep. 2009 08:41 <-- editieren / zitieren -->
Hi, nur weil's mir gerade auffällt: Ich habe schlechte Erfahrungen rund um alles dotNET basierte, das aus Netzwerken aufgerufen wird. Da heisst's mächtig aufpassen in den Vertrauenseinstellungen des Betriebssystems. Die Rückfrage dazu: hast Du schon probiert, das Tools mal von C:xxx statt von M:xxx zu laden? - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 12. Sep. 2009 09:18 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 12. Sep. 2009 11:35 <-- editieren / zitieren -->
Hi, ich hab's jetzt mit 2009 und 2010 probiert. Meine dotNET-DLL hab ich in der Registry so definiert, dass diese mit der Application geladen wird (wie Du auch). Dann habe ich AutoCAD gestartet, eine LISP-Funktion definiert, den Befehlsaufruf aus meiner App gestartet, die mir anzeigt, ob eine LISP-Funktion deklariert ist oder nicht und es liefert mir in beiden Fällen (definiert und nicht-definiert) die richtige Antwort. Damit wäre zu klären: a) hast Du Dein LISP irgendwo drin, wo es automatisch geladen wird? (den Zustand habe ich nicht probiert, da es ja zu viele unterschiedliche Varianten gibt, Deine weiss ich ja nicht) b) in LISP gibt es sowas wie 'definiert auf Applikations-Basis' und 'definiert auf Dokument-Basis' (da kenn ich mich beim Lisp viel zu wenig aus, aber es wäre vielleicht ein Ansatz, darüber nachzudenken). c) probier mal gleiches wie ich gemacht habe, einfach nach dem Start von AutoCAD die LISP-Funktion zu deklarieren, ob es dann auch bei Dir den falschen Wert retourniert. - alfred - PS: ich hab von Drive C: probiert ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 12. Sep. 2009 editiert.] |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 12. Sep. 2009 13:09 <-- editieren / zitieren --> Unities abgeben:
hab gerade meine erste lisp-funtion geschrieben: Code: (defun test(/)(print "test))
Über die Console funktioniert der Aufruf der LISP-Funktion auch, aber über meinen Button in der Toolbar eben nicht Code:
Dim walkLayout As AcadToolbarItem walkLayout = laOsToolbar.AddToolbarButton(laOsToolbar.Count, "Layouts", "Layouts", IIf(Utils.IsLispCommandDefined("C:test"), "layouts", "lispRoutineInToolbarNotLoaded") + vbCr) walkLayout.SetBitmaps("LaOs\Layouts_small.bmp", "LaOs\Layouts_large.bmp")
Meine Lisp-Funktionen hab ich in der Startgruppe von den AutoLISP-Anwendungen festgelegt. Ich glaub ich gebs so langsam auf, so wichtig ist der Test ob das geladen ist auch nicht wirklich. Wäre nur eben schön gewesen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 12. Sep. 2009 14:00 <-- editieren / zitieren -->
Hi, zu Deinen Statements: A) (defun test(/)(print "test)) B) IIf(Utils.IsLispCommandDefined("C:test") zu A) da fehlt ein Anführungszeichen nach dem Wort 'test' zu A+B) wenn die Lispfunktion ohne 'C:' definiert ist, dann darfst Du auch die Prüfung nicht MIT 'C:' machen. Zu welchem Zeitpunkt (in bezug auf AutoCAD-Start) erstellst Du das Icon? Zuerst war Deine Aussage (so habe ich diese interpretiert), dass die Funktion 'xxx.IsLispCommandDefined' von einem händischen Aufruf initiiert wird. Icons für die Benutzeroberfläche werden aber doch eigentlich beim Programmstart geladen und da stehen wir ev. doch an dem Punkt, dass Dein dotNET-DLL vor Deinem Lisp geladen wird. - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 12. Sep. 2009 14:38 <-- editieren / zitieren --> Unities abgeben:
Das Anführungszeichen hab ich natürlich nur beim Abtippen vergessen. Beim Start des Programmes wird der Button erzeugt und nur wenn ein Benutzer auf den Knopf drückt wird der Test durchgeführt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 12. Sep. 2009 16:57 <-- editieren / zitieren -->
Hi, Zitat: laOsToolbar.AddToolbarButton(laOsToolbar.Count, "Layouts", "Layouts", IIf(Utils.IsLispCommandDefined("C:test"), ....
damit ist es unerheblich, wann der Button gedrückt wird, es zählt, wann Deine Applikation den Button erzeugt. Und wird Deine dotNET-Applikation aktiviert, bevor die Lisps geladen werden, wird der Button eben mit dem Aufruf 'lispRoutineInToolbarNotLoaded' deklariert. - alfred - ------------------ www.hollaus.at |
Gloem Mitglied Geoinformatiker
Beiträge: 181 Registriert: 07.12.2007 Windows 10 - 64 Bit, mindestens 16 GB RAM <P>AutoCAD Map 2020, VBA, Dot-Net
|
erstellt am: 12. Sep. 2009 17:22 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 12. Sep. 2009 17:33 <-- editieren / zitieren -->
Hi, darüber hätte ich schon nachgedacht, ob das irgendwo steht oder zu finden wäre. Kurzum ich hätte nicht's gefunden, wo beschrieben wäre, in welcher Reihenfolge die Dinge geladen werden; sonst hätte ich es auch schon geschrieben. Rein aus Bauchgefühl heraus hätte ich aber mal vermutet, dass Lisp und VBA in der Kette wohl eher am Ende des AutoCAD-Initialisierungsvorgangs stehen werden, aber eben nur Bauchgefühl. Es wäre alternativ möglich, folgendes Beispiel: (if (not (vl-vlx-loaded-p "ISH_HMap03")) (load (findfile "ISH_HMap03.vlx"))) zu verwenden. Dieses prüft, ob eine VLX-Datei geladen ist, wenn noch nicht, dann wird diese geladen. Dieses kannst Du entweder in eine MNL-Datei plazieren (wenn Du Dein Menü lädst, oder AutoCAD beim Starten dieses lädt, dann wird dieses automatisch abgearbeitet) - oder - diesen String dem Menüicon zuweisen und einfach vor dem Lisp-Aufruf plazieren. HTH, - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|