Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Solid Edge
  SE Programmierung mit C#

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 SolidEdge
Autor Thema:  SE Programmierung mit C# (4989 mal gelesen)

Ex-Mitglied

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

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


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

Beiträge: 393
Registriert: 03.10.2003

Windows 11 Pro
Solid Edge 2022

erstellt am: 17. Nov. 2011 09:19    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

Hoi Rafi,
ich programmiere mit VB.NET. Um C# kennenzulernen gibt es gute Konverter, wo du die VB Beispiele übersetzen kannst. Für den Anfang sicher nicht schlecht.
Gruss Matthias

------------------
SE ST4
SePropManager.NET und SeDimPro2 von
www.leemann-software.net

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

Seapanther
Mitglied
CAD-Consultant

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

Beiträge: 3
Registriert: 02.10.2009

Irgendwatt watt viel zu laut ist.

erstellt am: 17. Nov. 2011 17: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 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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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.


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

Beiträge: 200
Registriert: 19.11.2004

erstellt am: 18. Nov. 2011 09:00    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 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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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.


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

Beiträge: 200
Registriert: 19.11.2004

erstellt am: 18. Nov. 2011 10: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 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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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.


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

Beiträge: 200
Registriert: 19.11.2004

erstellt am: 21. Aug. 2012 12:23    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,

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

OMG...

Danke Wolfgang!

Es ist einfach zu heiß hier drin... 

------------------
Gruß

rafi

NeZeal
Mitglied
Projektkoordinator


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

Beiträge: 63
Registriert: 02.02.2012

erstellt am: 07. Sep. 2012 07:40    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

Servus,

gibt es irgendwo die Möglichkeit, sich in VB-PRogrammierung für SolidEdge mal einzulesen?

mfg Nils

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

mheitzmann
Mitglied
Leiter IT / Administrator / Konstruktion


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

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 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 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

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