Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Verbindung zu SWX verloren

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 SOLIDWORKS
  
Bechtle stärkt PLM-Geschäft mit Neugründung
Autor Thema:  API: Verbindung zu SWX verloren (1272 mal gelesen)
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Sep. 2004 09:36    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

Ich schon wieder...

Ich habe bei mir folgendes Phänomen:
Ich habe diverse VB-Programme, die nach dem Schema

Code:
...
    Set swApp = CreateObject("SldWorks.Application")
    Set Drw = swApp.ActiveDoc
   
    If (Drw Is Nothing) Then
    'Keine Zeichnung geöffnet!
        MsgBox No_Drawing, vbCritical
        GetDrawing = False
        Exit Function
    End If
   
    If (Drw.GetType <> swDocDrawing) Then
    'Dok ist keine Zeichnung!
        MsgBox No_Drawing, vbCritical
        GetDrawing = False
        Exit Function
    End If
...
die Verbindung zu SWXSolidWorks herstellen und prüfen, ob gerade eine Zeichnung geöffnet ist.
Klappt soweit ja prima, nur:
Wenn in diesem Moment SWXSolidWorks nicht läuft, bekomme icherst mal richtigerweise die Fehlermeldung "Keine Zeichnung geöffnet".

Aber: Dann geht irgendwie der ganze Mechanismus, nach dem die Verbindung hergestellt wird, den Bach hinunter.

Wenn ich SWXSolidWorks nun starte, eine Zeichnung öffne und das Programm wieder starte, erhalte ich wieder die Meldung "Keine Zeichnung!".
Da hilft nicht mal ein Ab- und Anmelden, sondern nur noch ein Neustart, dann funktioniert alles wieder.

Diesen Effekt habe ich sowohl bei mir mit Win2000 als auch bei Kollegen mit WinXP.

Steckt da irgendein Wurm in meinem Code? Oder ist das immer so?

Gruß

------------------
Klaus Massler

www.al-ko.de
privat...
ForumsChat: Schau doch mal hier rein, wenn ihr Zeit habt...

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 28. Sep. 2004 10:27    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 KMassler 10 Unities + Antwort hilfreich

Hallo Klaus,

ich vermute mal die Ursache in deinem Code, aber das ist mit den Schnipseln nur schwer zu sagen. In jedem Fall solltest du mal schauen, wie viele SolidWorks-Prozesse so auf deiner Maschine laufen ... vielleicht klinken sich deine Programme immer an den falschen Prozess. In jedem Fall wird ja mit dem CreateObject("SldWorks.Application") ein neuer Prozess aufgemacht, wenn das Programm keinen findet, und der hängt dann u.U. unsichtbar im Speicher rum.

Allerdings sollte das durch Ab- und Anmelden zu kurieren sein, scheint also noch etwas anderes zu sein 

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite
http://solidworks.cad.de
KLAMM? Was ist KLAMM?

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Sep. 2004 11:09    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 Stefan,

Zitat:
Original erstellt von StefanBerlitz:
...ich vermute mal die Ursache in deinem Code, aber das ist mit den Schnipseln nur schwer zu sagen...
mehr als diese Schnipsel laufen nicht ab, wenn keine Zeichnung offen ist.

Das  mit dem SWXSolidWorks-Prozess war ein guter Hinweis, es wird wirklich ein neuer SolidWorks-Prozess gestartet, ohne dass SWXSolidWorks wirkich los legt. Wenn ich den im Taskmanager lösche, kann ich mir den Neustart sparen.

Die Frage ist dann natürlich:  wie mache ich das besser? Der Code aus dem Macro-Recorder "Set swApp = Application.SldWorks" funktioniert ja in VB6 nicht. Oder wie kann ich feststellen, ob SWXSolidWorks überhaupt läuft?

Ciao

------------------
Klaus Massler

www.al-ko.de
privat...
ForumsChat: Schau doch mal hier rein, wenn ihr Zeit habt...

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

Kalle
Mitglied
Student


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

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 28. Sep. 2004 11:11    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 KMassler 10 Unities + Antwort hilfreich

Aheu Klaus,

wenn SolidWorks schon läuft klinkst Du Dich an die laufende Version mit

set swApp = GetObject(, "SldWorks.Application")

an. Nachteil dieser Methode ist allerdings, dass es einen Laufzeitfehler gibt wenn kein SolidWorks läuft. Dummerweise (zumindest bei mir) kann man diesen Fehler auch mit

On Error Resume Next

nicht umgehen. Der meckert trotzdem rum dass eine Objekterstellung duch eine ActiveX-Komponente nicht möglich ist - oder so ähnlich.

Bis dann,
Kalle

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Sep. 2004 11:18    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

Danke!

Das scheint zu klappen! 

und mit "On Error Goto irgendwas" lässt sich der Fehler auch abfangen!

(Irgendwas ist natürlich irgendeine Sprungmarke, "Fehler:", "Error:" oder so...)

10U4U!! 

------------------
Klaus Massler

www.al-ko.de
privat...
ForumsChat: Schau doch mal hier rein, wenn ihr Zeit habt...

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

Kalle
Mitglied
Student


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

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 28. Sep. 2004 11:21    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 KMassler 10 Unities + Antwort hilfreich

Aheu Klaus,

mit On Error Goto Sprungmarke klappt's und mit On Error Resume Next klappt's nicht? Was soll denn das. Aber danke für den Hinweis.

Bis dann,
Kalle

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Sep. 2004 11:26    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

da musst du mal Bill Gates fragen ...

------------------
Klaus Massler

www.al-ko.de
privat...
ForumsChat: Schau doch mal hier rein, wenn ihr Zeit habt...

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

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


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

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 28. Sep. 2004 11:47    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 KMassler 10 Unities + Antwort hilfreich

Hallo Klaus.

Ich vermute wie Stefan, dass wenn kein SWXSolidWorks läuft, dein Code ein neues SWXSolidWorks aufmacht. So wie's ausschaut, bleibt dieser Task am Leben, weil Du ihn in den "if then's" nicht wieder schliesst. Er bleibt im Speicher hängen.

Ich an Deiner stelle würde den Task wieder schliessen mit

swApp.close ( oder so ähnlich)

Auf jeden Fall solltest Du die zugewiesenen Object's wieder aus dem Speicher werfen mit:

set Drw = Nothing
set swApp = Nothing

z.B. kannst Du ja eine Sub "SchliesseAlleObjects" schreiben und diese vor jedem Verlassen des Macro's aufrufen.

Ansonsten kann es u.U. zu ganz "komischen" Dingen kommen.

------------------
Gruss
Andreas
A+E Müller AG

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Sep. 2004 11:50    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 Andreas,

ich dachte, das macht VB selber (das Aufräumen)?

Mit dem "GetObject" von Kalle klappts aber ganz gut. ODer spricht da was dagegen?
Ciao

------------------
Klaus Massler

www.al-ko.de
privat...
ForumsChat: Schau doch mal hier rein, wenn ihr Zeit habt...

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

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


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

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 28. Sep. 2004 13:28    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 KMassler 10 Unities + Antwort hilfreich

Hi Alle.

Ich muss zugeben, in diesen Regionen bin ich auch nicht ganz sattelfest (bin halt nur Hobby-Programmer  ). Aber ich interpretiere das so:

- mit "CreateObject" generierst Du offenbar in Windows einen neuen Task. Diesen sollte man, wie bei einem normalen Programmaufruf, auf wieder beenden. Ansonsten bleibt er stehen. In Windows kann man bekanntlich 2 SWXSolidWorks-Session's laufen lassen. Diese werden vermutlich nummeriert. Wenn Du nun mit Create eine Session aufmachst, kriegt die die Nummer 0. Wenn du eine 2. aufmachst kriegt sie die Nr. 1. Das Macro holt sich vermutlich die nächstbeste Session = Nr. "0") und die, da sie unbemerkt läuft, hat kein Modell offen und das Proggi schmiert mit der Meldung "keine Zeichnung offen" ab. Die Nr.1, in der Du ein Modell offen hast, wird gar nicht bemerkt.

- mit "GetObject" ist das natürlich anders. Hier sollte das Progamm einen Fehler geben, wenn keine SWXSolidWorks-Session offen ist. Mit einem SWXSolidWorks-Macro ist das noProb, da es ja aus SWXSolidWorks gestartet wird. Ist es aber ein SWXSolidWorks-externes Programm, könnte das schon mal zu "Missverständnissen" führen.

Aber, wie gesagt. Ganz sicher bin ich da auch nicht.

Wegen "Set X = nothing" kann schon sein, dass beim beenden eines Programmes alle Object's zurückgesetzt werden. Bin auch nicht ganz sicher. Ich habe es mir aber angewöhnt, dies selbst zu machen. Dann ist es ein kontrollierter "Kill"  .

------------------
Gruss
Andreas
A+E Müller AG

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



Projektingenieur (m/w/d) Maschinenbau
Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte....
Anzeige ansehenProjektmanagement
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 28. Sep. 2004 14:51    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

also soweit ich das bisher übersehe
Zitat:
Original erstellt von Andreas Müller:
...- mit "CreateObject" generierst Du offenbar in Windows einen neuen Task. Diesen sollte man, wie bei einem normalen Programmaufruf, auf wieder beenden. Ansonsten bleibt er stehen. In Windows kann man bekanntlich 2 SWXSolidWorks-Session's laufen lassen. Diese werden vermutlich nummeriert. Wenn Du nun mit Create eine Session aufmachst, kriegt die die Nummer 0. Wenn du eine 2. aufmachst kriegt sie die Nr. 1. Das Macro holt sich vermutlich die nächstbeste Session = Nr. "0") und die, da sie unbemerkt läuft, hat kein Modell offen und das Proggi schmiert mit der Meldung "keine Zeichnung offen" ab. Die Nr.1, in der Du ein Modell offen hast, wird gar nicht bemerkt.

Stimmt fast. Wenn SWXSolidWorks normal läuft, dann wird es mit CreateObject auch gefunden und alles ist paletti. Es wird dann auch kein zusätzlicher Prozess gestartet. Nur wenn es vorher noch nicht läuft, dann wird ein Prozess gestartet, ohne aber richtig hoch zu kommen. Den könnte man dann evtl. mit sowas wie CloseObject wieder beenden, das habe ich nicht probiert, da ja ...

Zitat:
Original erstellt von Andreas Müller:- mit "GetObject" ist das natürlich anders. Hier sollte das Progamm einen Fehler geben, wenn keine SWXSolidWorks-Session offen ist. Mit einem SWXSolidWorks-Macro ist das noProb, da es ja aus SWXSolidWorks gestartet wird. Ist es aber ein SWXSolidWorks-externes Programm, könnte das schon mal zu "Missverständnissen" führen.
...mit GetObject alles klappt, Fehler lassen sich mit On Error goto abfangen (s.o.)
Zitat:

Wegen "Set X = nothing" kann schon sein, dass beim beenden eines Programmes alle Object's zurückgesetzt werden. Bin auch nicht ganz sicher. Ich habe es mir aber angewöhnt, dies selbst zu machen. Dann ist es ein kontrollierter "Kill"

Also da bin ich mir ziemlich sicher, dass VB alle Objecte etc. wieder richtig schließt bzw. aus dem Speicher haut. Zum Glück. Das habe ich vor vielen Jahren bei meinen Programmierversuchen mit Delphi bzw. damals noch TurboPascal für Windows immer nicht richtig auf die Reihe bekommen- mit dem Erfolg, dass die Ressourcen immer ruckzuck verbraucht waren.

Ich gehe im Moment davon aus, dass mit GetObject diese meine Probleme behoben sind. Und hoffe, dass das auch morgen noch stimmt 

Danke an alle Beteiligten!

Ciao

------------------
Klaus Massler

www.al-ko.de
privat...
ForumsChat: Schau doch mal hier rein, wenn ihr Zeit habt...

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)2024 CAD.de | Impressum | Datenschutz