Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Lisp von c# aus laden ohne! SendStringToExecute

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Lisp von c# aus laden ohne! SendStringToExecute (2377 mal gelesen)
Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 17. Mai. 2011 09:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich bin auf der Suche nach einer Möglichkeit eine Lisp-Datei von c#.Net aus zu laden. Dies darf allerdings nicht als <SendStringToExecute> passieren, da das Laden in einem Reactor geschehen soll.

LoadArx / LoadDVb habe ich gefunden, aber nichts für LSP.

Hat jemand eine Idee? (und falls ja -> Welche?)

Besten Dank!

Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 17. Mai. 2011 17:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wenn Du das VL-ActiveX-Objekt verwendest, dann kannst Du direkte LISP-Statements absetzen, damit auch (load "C:/TEMP/TEST.LSP") funktionieren.

Basis im Form von VBA findest Du >>>hier<<<

HTH, - alfred -

------------------
www.hollaus.at

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 17. Mai. 2011 22:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,

Ich danke dir ...
aber das funktioniert leider nicht. Ich kann den Lisp-Befehl ohne Probleme auf dem von dir beschriebenen Weg absetzen, wenn ich diesen via [CommandMethod(..)] einbinde.
Im Reactor verursacht selbe Routine leider einen Fehler funktioniert dieser leider nicht  ( - da kann ich die funcall-Methode nicht aufrufen.

Schade, wäre aber eine Lösung gewesen.

Danke Dir dennoch .. wer weiß, wann ich diese Lösung noch einmal brauchen kann.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 17. Mai. 2011 23:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Update!

Hintergrund: Ich bastel an einer Datenbankbasierten UserVerwaltung. Soll heißen: Es gibt Benutzer und Benutzergruppen, in einer Datenbank werden Systemvariablen, Menü's, Support-Pfade und eben zu ladende Lisp-Dateien vorgehalten. Das Programm liest die Infos' entsprechend des Eintragungen in der Datenbank aus und biegt das System entsprechend hin. Das hat den Vorteil, man brauch nur eine DLL in das Image mit einschieben, und der Rest wird ohne irgendwelche Änderungen an der acad-Lisp oder sonstwo erledigt.

Ich habe nun, da ja Lisp's bekanntlich mit jedem Dokument geladen werden wüssen, einen DocumentCreated-Reactor eingebaut, der eben am Ende der Dokumenterzeugung die notwendigen Lisp's lädt (der Rest wird ja einmalig bei der Initialisierung eingestellt).
In diesem Reactor (der seltsamerweise in den verschiedenen AutoCAD-Versionen zu unterschiedlichen Zeitpunkten anspringt) funktioniert das Laden nicht via SendStringtoExecute und nicht über den von dir genannten Weg.
Nun das Update:
In dem DocumentCreated-Reactor füge ich nun einen DocumentLockModeChanged-Rektor hinzu, der sich dann selber wieder löscht, nachdem die Lisp-geladen wurden. Innerhalb dieses Reactors funktioniert das Laden nun wunderbar.

Danke dir nochmal Alfred!

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 18. Mai. 2011 07:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Holger,

danke für Deine Rückmeldung!

Ja  Da ich mit LISP nicht viel (eigentlich NIL  ) am Hut habe, kann ich die Funktionalität/Auswirkungen von LISP-Reaktoren in Zusammenhang mit dem VL-ActiveX-Objekt leider gar nicht abschätzen.

Ich arbeite mehr in der dotNET-Umgebung und so wie Du es beschreibst, hätte ich das Eventhandling von dotNET genutzt, um zu erkennen, ob/wann ein neues Doc geöffnet wurde (Event auf DocumentManager.xxx) und von da aus agiert (Initialisierung, LISP-Files laden, ...).

Umso besser, dass Du für Dich eine Lösung gefunden hast!
Danke für die Beschreibung, damit bin ich zumindest gewarnt, wenn mal wer mit LISP+Reaktoren kommt, und ich das von der App aus laden soll. 

- alfred -

------------------
www.hollaus.at

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 19. Mai. 2011 08:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,

zur Info: ich nehme das .Net-Event-Handling. Aber es ist eben so, dass das DocumentCreated (aus der DocCollection) nicht beim Starten von Acad anspringt, und auch dort das Absetzen von SendStringToExecute nicht funktioniert. Da jedoch in .Net nur LoadArx und LoadDVB vorhanden ist .. und ich aber ein LoadLisp brauche, musste ich einen anderen Weg finden.

Und als Ergänzung: Ich arbeite nahezu nur noch in C#.Net - es ist für mich inzwischen schneller und besser zu handhaben als das Lisp. Man bekommt deutlich schnellere Programme hin, mit deutlich besseren Oberflächen. Die Möglichkeiten die man dort hat (aber wem erzähl ich das) sind um ein Vielfaches größer als in Lisp .. gerade wenn man in Richtung Applikationen unterwegs ist. Die Lisp-Engine ist eben auf dem Stand von 19XX stehen geblieben. Schade zwar, aber wohl auch nicht zu ändern.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 23. Mai. 2011 11:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Brischke 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Brischke:
Hallo Alfred,

zur Info: ich nehme das .Net-Event-Handling. Aber es ist eben so, dass das DocumentCreated (aus der DocCollection) nicht beim Starten von Acad anspringt, und auch dort das Absetzen von SendStringToExecute nicht funktioniert. Da jedoch in .Net nur LoadArx und LoadDVB vorhanden ist .. und ich aber ein LoadLisp brauche, musste ich einen anderen Weg finden.


Hallo Holger,

prüf' doch mal, ob DocumentCreated vor oder nach dem Aufruf von S::Startup anspringt. Eventuell kannst Du diese Funktion nutzen, um Deine Lisps zu laden.

Zitat:
Und als Ergänzung: Ich arbeite nahezu nur noch in C#.Net - es ist für mich inzwischen schneller und besser zu handhaben als das Lisp. Man bekommt deutlich schnellere Programme hin, mit deutlich besseren Oberflächen. Die Möglichkeiten die man dort hat (aber wem erzähl ich das) sind um ein Vielfaches größer als in Lisp .. gerade wenn man in Richtung Applikationen unterwegs ist. Die Lisp-Engine ist eben auf dem Stand von 19XX stehen geblieben. Schade zwar, aber wohl auch nicht zu ändern.

Ja, so ist das wohl. Trotzdem: die Programmentwicklung in Lisp ist immer noch um einen Faktor deutlich größer 2 schneller als in C#, und bei den meisten AutoCAD-Apps kommt's den Kunden mE dann doch eher auf die dadurch eingesparten Kosten an als auf ein schneller laufendes Programm oder mehr Gimmicks im GUI.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 23. Mai. 2011 13:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Achim,

danke für den Tip mit dem s::statup.

Das geht leider nicht, da die Original-Dateien unverändert bleiben sollen.

ich habe es inzwischen hinbekommen. Allerdings ist mir die Reactor-Geschichte sehr suspekt.
Ich habe das jetzt wie folgt gelöst. Das CL-Com-Objekt ist erst verfügbar (der Zugriff darauf) nach dem dieses via (vl-load-com) instanziert wurde. Ich kann also über das VL-COM-Object meine Lisp's nicht laden, da nicht sicher gestellt ist, dass das VL-Com-Object auch tatsächlich zur Verfügung steht.

Deim Start von AutoCAD frage ich den DocumentLockmode ab. Da dieser beim Start häufig wechselt, wersuche ich immer, wenn das Document als nicht gesperrt deklariert ist, die Lisp's via SendStringToExecute zu laden. Das funktioniert allerdins nur zu dem Zeitpunkt, wenn das Document endgültig frei gegeben ist - aber dann funktioniert es.

Allerdings funzt das <SendStringToExecute> auf diesem Wege nicht, wenn man ein neues Dokument öffnet oder erstellt. Da ich aber beim Start von Acad sicher gestellt habe, dass das (vl-load-com) ausgeführt wurdfe, kann ich nun, darüber die Lisp's laden.


Noch ein Wort zu den Entwicklungszeiten: Ich habe mir inzwischen eine so umfangreiche C#-Bibliothek und eine spezielle Projekt-Vorlage erstellt, dass ich wirklich behaupte, ebenso schnell in C# wie in Lisp zu sein. Das mag nicht auf alle Aufgabenstellungen zutreffen, wohl aber auf die, mit denen ich es am häufigsten zu tun habe. Da sich mein Aufgabenschwerpunkt sehr in Richtung CAFM-Datenaufbereitung und Informationsaustausch zwischen Acad /AutoCAD Architecture und Datenbanken / Excel / XML-Dateien verschoben hat, bietet mir das .Net-Framework hier hervorragende Möglichkeiten, die ich seitens Lisp nicht zur Verfügung habe - folglich erst noch erstellen müsste.
Ein Großteil meiner Kunden sieht es auch als sehr positiv an, dass sich zum. Bsp die Programmeinstellungen in die AutoCAD-Optionen integrieren und man nicht in irgendwelchen Konfigurationsdateien Eintragungen vornehmen muss. Das macht die Programme intuitiv, vor allem auch von den Normalanwendern bedien- und konfigurierbar.

Was ich sehr häufig (zumindest für den internen Gebrauch) mache, dass ich die Entwicklungsumgebungen mische. Die fehlenden Lisp-Funktionen, programmiere ich in .Net-C# und nutze diese dann von Lisp aus.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 23. Mai. 2011 14:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Brischke 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Brischke:
Hallo Achim,

danke für den Tip mit dem s::statup.

Das geht leider nicht, da die Original-Dateien unverändert bleiben sollen.


Nein, ich dachte, dass Du die bereits geladene (die kann ja von überall her kommen) S::STARTUP-Funktion von C# aus manipulierst. Da die S::STARTUP mit DEFUN-Q definiert werden soll, liegt die als manipulierbare Liste vor, an die Du beliebige Erweiterungen hängen kannst, ohne irgend welche Dateien manipulieren zu müssen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz