| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
| |
 | Solid Edge Basis Konstruktion Schulung - 5-tägige Schulung für Einsteiger, ein Seminar am 30.06.2025
|
Autor
|
Thema: SE Programmierung mit C# (5304 mal gelesen)
|
Ex-Mitglied
|
erstellt am: 17. Nov. 2011 08:50 <-- editieren / zitieren -->
Hallo zusammen, ich habe begonnen mich in die Programmierung und in C# einzuarbeiten und als Ziel habe ich mir gesetzt, dass ich das eine oder andere für SE programmieren will. Hat hier irgendjemand Erfahrung in der Programmierung für SE in C# und der sich austauschen möchte oder programmieren hier alle in VB?
------------------ Gruß rafi |
Matthias Leemann Mitglied Masch. Ing HTL
 
 Beiträge: 394 Registriert: 03.10.2003 Windows 11 Pro Solid Edge 2022
|
erstellt am: 17. Nov. 2011 09:19 <-- editieren / zitieren --> Unities abgeben:         
|
Seapanther Mitglied CAD-Consultant
 Beiträge: 3 Registriert: 02.10.2009 Irgendwatt watt viel zu laut ist.
|
erstellt am: 17. Nov. 2011 17:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo Rafi, was willst du denn genau machen ??? Willst du 64Bit oder 32Bit machen ??? Ich habe auch mit Programmierung angefangen und mich für C# entschieden. Ein bisschen habe ich schon gemacht, ist aber nicht die Welt. Gute Infos zum SE Programmieren kann man auch Hier finden --> http://www.jasonnewell.net/ <-- Gruß Stephan ------------------ Das Leben ist nicht so Schei.... wie alle behaupten !!! [Diese Nachricht wurde von Seapanther am 17. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Nov. 2011 06:46 <-- editieren / zitieren -->
Hallo Stephan, ich möchte zu allererst einmal Lernen. Dazu möchte ich einfache Progrämmchen basteln, so dass ich nachvollziehen kann und im Idealfall auch verstehe was ich tue. Ist also nur für mich eine rein persönliche Geschichte zum Lernen. Zum Beispiel möchte ich per Knopfdruck eine DFT als PDF sichern (klar, womöglich gibts da schon was, aber ich mach es ja nicht damit ich es habe sondern zum Lernen). Aktuell komme ich aber grad schon bei dem Versuch ein einfaches Dokument zu öffnen nicht weiter. Ich habe in der Solid Edge SDK geschaut und mir den Code soweit mal einverleibt, jedoch steht in der Beschreibung nur wie man ein Dokument erzeugt (was auch funktioniert), nicht aber wie man eines öffnet. Ich habe versucht das mal umzusetzen aber er bringt mir immer die Fehlermeldung: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." Ich habe hier mal den Quellcode angehängt, vieleicht kann mir jemand einen Tipp geben?
Code: namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SolidEdgeFramework.Application application = null; SolidEdgeFramework.Documents documents = null; SolidEdgeDraft.DraftDocument draft = null; Type type = null; try { // Get the type from the Solid Edge ProgID type = Type.GetTypeFromProgID("SolidEdge.Application"); // Connect to a running instance of Solid Edge application = (SolidEdgeFramework.Application) Marshal.GetActiveObject("SolidEdge.Application");
draft = (SolidEdgeDraft.DraftDocument) documents.Open("V:\\Draft2.dft", Missing.Value); Console.ReadLine(); } catch (System.Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } finally { if (application != null) { Marshal.ReleaseComObject(application); application = null; } } } } }
Er bleibt dann nach dem Code: Marshal.GetActiveObject("SolidEdge.Application")
stehen und bricht ab. Nochmals: ich bin Anfänger! Auch was die Programmierung allgemein angeht. Es kann also sein, dass sich ein unwahrscheinlich dämlicher Anfängerfehler versteckt. Aber nur so lernt man...
------------------ Gruß rafi |
wksyspro Mitglied Dipl.-Ing.
 
 Beiträge: 204 Registriert: 19.11.2004
|
erstellt am: 18. Nov. 2011 09:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo rafi, der kleine Fehler liegt in der Zeile, wo Du das Dokument öffnen möchtest. Hier verwendest Du documents, obwohl es noch mit null initialisiert ist. Deswegen auch der Wortlaut der Fehlermeldung. Zur Beseitigung des Fehlers musst Du entweder zuvor einfügen:
Code: documents = (SolidEdgeFramework.Documents)application.Documents
oder Du verzichtest auf die Deklaration und Verwendung von documents und schreibst stattdessen:
Code: draft = (SolidEdgeDraft.DraftDocument) application.Documents.Open(...)
P.S. - Im finally Block solltest Du außer der Variablen application auch noch die anderen COM-Variablen draft und documents (falls verwendet) freigeben. - Die Variable type ist in Deinem Programm nicht nötig und kann auch entfallen. ------------------ Viele Grüße, Wolfgang Kunert www.wksyspro.de [Diese Nachricht wurde von wksyspro am 18. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Nov. 2011 09:37 <-- editieren / zitieren -->
Hallo Wolfgang, vielen Dank! Stimmt. Jetzt wo Du es sagst macht es auch wieder Sinn...
------------------ Gruß rafi |
Ex-Mitglied
|
erstellt am: 18. Nov. 2011 09:46 <-- editieren / zitieren -->
Hallo Wolfgang, hab dein P.S.: erst nach meiner Antwort gesehen. Zitat: - Im finally Block solltest Du außer der Variablen application auch noch die anderen COM-Variablen draft und documents (falls verwendet) freigeben.
Ok... welchen Grund hat dies? Für was mach ich das? Und was ist, wenn ich es nicht mache? Zitat: - Die Variable type ist in Deinem Programm nicht nötig und kann auch entfallen.
Stimmt. Hab es auskommentiert und es geht. Wofür kann ich dann dieses GetTypeFromProgID mal gebrauchen? Was für einen Typ bekomme ich denn da, sprich was wird da ausgelesen? Welche Dokumentart aktuell geöffnet ist, sprich DFT, ASM, PAR usw.?
------------------ Gruß rafi |
wksyspro Mitglied Dipl.-Ing.
 
 Beiträge: 204 Registriert: 19.11.2004
|
erstellt am: 18. Nov. 2011 10:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo rafi, Zitat: Zitat: -------------------------------------------------------------------------------- - Im finally Block solltest Du außer der Variablen application auch noch die anderen COM-Variablen draft und documents (falls verwendet) freigeben. --------------------------------------------------------------------------------Ok... welchen Grund hat dies? Für was mach ich das? Und was ist, wenn ich es nicht mache?
Unter .NET profitiert man im Gegensatz zu z.B. C/C++ als Programmierer von der automatischen Speicherverwaltung. D.h. die Freigabe des Speichers für ein Objekt geschieht automatisch durch den sogenannten Garbage Collector, wenn der angeforderte Speicherbereich von keinem Objekt mehr referenziert wird. Dies gilt aber nur für die sogenannten verwalteten Speicherbereiche. Mit COM-Interop wird dagegen auf unverwalteten Speicher zugegriffen und es muss signalisiert werden, dass der für ein COM-Interop Objekt verwendete Speicher freigegeben werden kann. Unterlässt man dies, kann es je nach Laufzeit und Aktivität des Programms zu Speicherlecks, also nicht zur Verfügung stehendem Speicher (RAM) kommen - bishin zu undefinierten Abstürzen. Zitat: Original erstellt von rafi: Wofür kann ich dann dieses GetTypeFromProgID mal gebrauchen? Was für einen Typ bekomme ich denn da, sprich was wird da ausgelesen? Welche Dokumentart aktuell geöffnet ist, sprich DFT, ASM, PAR usw.?
Unter .NET 1.1 (inzwischen sind wir bei 4.0 angelangt) funktionierte das Anzapfen oder Erzeugen eines Solid Edge COM (Server) Objekts nicht, wie in Deinem Programm jetzt oben über die ProgID "SolidEdge.Application" angewendet, sondern es musste eine andere Methode verwendet werden, die als Parameter einen Wert vom Typ Type erwartete. Mittels der Methode GetTypeFromProgID konnte man sich diesen Type-Wert beschaffen. ------------------ Viele Grüße, Wolfgang Kunert www.wksyspro.de [Diese Nachricht wurde von wksyspro am 18. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 09. Dez. 2011 07:29 <-- editieren / zitieren -->
Hallo zusammen, jetzt habe ich mein erstes kleines Programm geschrieben und möchte die .exe dann als Makro nutzen. Wenn ich das Makro auf eine Schaltfläche in der Schnellzugriffleiste legen möchte, kann ich dann irgendwie die Info schon mitgeben, dass eine bstimmte .bmp als Icon in SE dann verwendet wird ohne dass ich es manuell auswählen muss? Denn sind wir mal ehrlich, die Schaltflächen die einem von SE angeboten werden....
------------------ Gruß rafi |
Ex-Mitglied
|
erstellt am: 21. Aug. 2012 12:15 <-- editieren / zitieren -->
Hallo, habe nun ein weiteres Problem. Ich möchte in einer Zeichnung alle Dimensions durchsuchen lassen und jeweils das Präfix austauschen. Mein Code sieht momentan so aus: Code: //Variablendefinition SolidEdgeFramework.Application application = null; SolidEdgeDraft.DraftDocument document = null; SolidEdgeDraft.Sheet sheet = null; SolidEdgeFrameworkSupport.Dimensions dimensions = null; SolidEdgeFrameworkSupport.Dimension dim = null; string prefixvorher = null; try { //Verbindung zu SolidEdge application = (SolidEdgeFramework.Application) Marshal.GetActiveObject("SolidEdge.Application"); application.Visible = true; document = application.ActiveDocument; sheet = document.ActiveSheet; dimensions = sheet.Dimensions; for (int i = 0; i < dimensions.Count; i++) { dim = dimensions.Item(i+1); prefixvorher = dim.PrefixString.ToString(); //Ausgabe Präfix zur Überprüfung MessageBox.Show(prefixvorher); dim.PrefixString.Replace(prefixvorher, "Hello"); } } catch (System.Exception ex) { MessageBox.Show(ex.Message); }
Es funktioniert soweit alles, nur scheint der "PrefixString.Replace" Befehl nicht zu greifen. Er überschreibt mir nämlich das Präfix nicht. Irgendjemand eine Idee was falsch läuft? Fehlermeldung wird keine angezeigt. ------------------ Gruß rafi |
wksyspro Mitglied Dipl.-Ing.
 
 Beiträge: 204 Registriert: 19.11.2004
|
erstellt am: 21. Aug. 2012 12:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo, die Replace-Methode liefert einen String zurück, den musst Du dann der PrefixString-Eigenschaft des Dimension Objekts zuweisen:
Code: dim.PrefixString = dim.PrefixString.Replace(prefixvorher, "Hello");
------------------ Viele Grüße, Wolfgang Kunert www.wksyspro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Aug. 2012 12:39 <-- editieren / zitieren -->
OMG... Danke Wolfgang! Es ist einfach zu heiß hier drin... ------------------ Gruß rafi |
NeZeal Mitglied Projektkoordinator

 Beiträge: 63 Registriert: 02.02.2012
|
erstellt am: 07. Sep. 2012 07:40 <-- editieren / zitieren --> Unities abgeben:         
|

| |
mheitzmann Mitglied Leiter IT / Administrator / Konstruktion
 
 Beiträge: 135 Registriert: 17.12.2002 Hardware: Fujitsu CELSIUS W510 Workstation Intel Xeon CPU E3125 3.20 GHz ; 16 GB RAM HDD SSD SATA, 128 GB, 2.5 nVidia Quadro FX 2000<P>Software: MS Win 7 Pro 64 Bit SP1 Solid Edge ST8 & aktuelles MP
|
erstellt am: 07. Sep. 2012 08:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo NeZeal wenn Du Solid Edge ST4 startest und oben rechts die Hilfe anwählst klappt eine Sidebar auf. Darin findet man zwei Beiträge: Programmieren mit Solid Edge und Solid Edge-Handbuch für Programmierer. Das zweite ist ein PDF Dokument mit vielen Beispielen in VB.NET und C#.NET Gruss MHeitzmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |