Hot News:

Unser Angebot:

  Foren auf CAD.de
  ENOVIA SmarTeam
  Scripte und .Net

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
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  Scripte und .Net (1471 mal gelesen)
marbasco
Mitglied
Developer

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

Beiträge: 9
Registriert: 25.11.2005

SmarTeam V5R14 SP7
.Net 2.0
Visual Studio 2005
Windows XP / SP2

erstellt am: 02. Dez. 2005 21:08    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 ein paar Usern, die Erfahrung mit Scripten in Smart Basic haben. Hat von es von euch jemand mal geschafft, eine eigene (oder auch eine andere externe) COM-Bibliothek in ein Script einzubauen?

Was ich naemlich machen moechte ist, dass ich die Funktionen meiner Scripte in einer Library in C# schreibe und die Funktionen der Library von einem Script aus aufrufe. Doch irgend wie finde ihc im Internet keine Hilfe oder Beispiele dazu. Und in der Dokumentation (wie erwartet) auch nicht. Da steht nur drin, wie man die SmarTeam COM Objecte nutzt, aber nicht wie man eigene einbindet.

Und die Funktion im Script Editor unter Run, Add Type Library scheint entweder nicht das richtige zu sein oder sie funtioniert nicht.

Also, wenn ihr mir da weiterhelfen koenntet, dann waere das grossartig.

Danke schon mal,

  Matthias

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

ChristianS
Mitglied
Leiter Kundenbetreuung


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

Beiträge: 635
Registriert: 27.09.2000

erstellt am: 05. Dez. 2005 08: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 Nur für marbasco 10 Unities + Antwort hilfreich

Hi Matthias,

du kannst in einem Script über :

'***************************************************
Dim DataSolid As Object
Set DataSolid = CreateObject("DataSolid_SmarTeam.STenhance")
  RetCode = DataSolid.CheckVerteilerliste(SmSession,Sstr,FirstRec,SecondRec,ThirdRec)
  Set DataSolid = Nothing
'***************************************************

jede beliebige Function einbinden.

Wie Du das COM Object programmierst hängt dann natürlich von Deiner Programmiersprache ab.

In VB6 erstellst Du ein Project mit einem 'ClassModule' und definierst darin die Function.

In meinem Beispiel sieht dass dann so aus :

'***************************************************
Public Function CheckVerteilerliste(SmSession As SmSession, sstr As String, firstrec As Object, secondrec As Object, thirdrec As Object) As Integer

' Dein Code ist hier :-)

Exit Function
'***************************************************


Im Script steht ja

Set DataSolid = CreateObject("DataSolid_SmarTeam.STenhance")

dabei ist DataSolid_SmarTeam der Projektname
und STenhance der Name des ClassModules

Die Parameter firstrec, secondrec und thirdrec wandele ich vor dem Aufruf der Routine immer in COM Reclists um, ebenso erzeuge ich das SmSession bereits im Script. (Das wie steht in der API Doku unter 'Tips for Writing Scripts')
So habe ich es dann in meinem selbstprogrammierten COM Object nur noch mit Objecten zu tun.


Wenn Du das ganze in C# schreibst musst Du eben nur schauen, wie darin ein COM Modul programmiert und bereitgestellt wird.


Gruß
Christian

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

marbasco
Mitglied
Developer

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

Beiträge: 9
Registriert: 25.11.2005

SmarTeam V5R14 SP7
.Net 2.0
Visual Studio 2005
Windows XP / SP2

erstellt am: 05. Dez. 2005 20:08    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 Christian,

erst mal danke, denn deine beschreibung funktioniert so schonmal einwandfrei mit VB.Net. Dafuer erstell ich in Visual Studio einfach ein neues Projekt fuer eine Dynamic Link Library und setzte dann bei den Eigenschaften ein Haeckchen fuer "Register for COM Interop" und schon funktioniert es.
Nur bei C# scheint es nicht so einfach zu funktionieren (obwohl es technisch gesehen keinen Unterschied geben sollte). Da zeigt er mir bei eintsprechendem Code (mit public interface und public class) einen leeren Namespace an, obwohl er eine Klasse und ein Interface anzeigen muesste. Danach muss ich jetzt also suchen. Falls mir jemand weiterhelfen kann, bin ich natuerlich auch sehr dankbar.

Gruss
  Matthias

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

marbasco
Mitglied
Developer

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

Beiträge: 9
Registriert: 25.11.2005

SmarTeam V5R14 SP7
.Net 2.0
Visual Studio 2005
Windows XP / SP2

erstellt am: 05. Dez. 2005 22: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

OK,

nun hab ich es auch endlich geschafft, dass ich meine Komponenten in C# schreiben kann. Ich habe nach laengerem suchen folgende Seite gefunden, die die Probleme ganz gut beschreibt und loest:
http://www.codeproject.com/dotnet/nettocom.asp

Nur hab ich Probleme jedesmal wenn ich meine Komponente neu compiliert habe. Dann bringt er mir eine Zugriffsverletzunf bei der Type Library. Um das zu loesen, muss ich dann mein Visual Studio und falls offen den SmarTeam Script Editor schliessen, die entsprechende Datei loeschen, dann Visual Studio wieder oefnen, mein Porjekt compilieren und dann von Hand (bzw mit einer Batch-Datei) die Type Library neu erstellen und registrieren (wie in dem Artikel beschrieben im Abschnitt "Doing It By Hand Or Not..."). Also doch ein bisschen umstaendlich. Aber es funktioniert!

Gruss
Matthias

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

marbasco
Mitglied
Developer

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

Beiträge: 9
Registriert: 25.11.2005

SmarTeam V5R14 SP7
.Net 2.0
Visual Studio 2005
Windows XP / SP2

erstellt am: 06. Dez. 2005 21: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

ok, ich habe (per Zufall) einen einfacheren Weg gefunden meine C# Komponenten einzubinden. Ich habe ein normales C# Class Library Project erzeugt. Dann habe ich folgende Properties geaendert:

  • Application, Assembly Information die Option "Make COM visible" gesetzt
  • Signing, "Sign the assembly" markieren und in DropDown neuen Key erzeugt
  • BuildEvents, bei PostBuildEvents folgende Befehle eingetragen (FileName mit wirklichem Name ersetzen):
    Code:

    tlbexp /tlb:FileName.tlb FileName.dll
    gacutil /i FileName.dll


Danach einfach Code schreiben (ich hab keine Interfaces verwendet und sonst nichts anders gemacht als bei ganz normalen C# Programmen), also nur Public class und public methods und das Project compiliert und ich konnte es im ScriptEditor mit CreateObject("Namespace.Classname") verwenden.

Viel Spass damit,

Matthias

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

marbasco
Mitglied
Developer

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

Beiträge: 9
Registriert: 25.11.2005

SmarTeam V5R14 SP7
.Net 2.0
Visual Studio 2005
Windows XP / SP2

erstellt am: 06. Dez. 2005 22:10    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

warum kann man in dem Forum nicht seine Eintraege editieren? Oder hb ich das nur uebersehen?

Auf jeden Fall muss der Aufruf des Post-build Events folgendermassen lauten:

Code:

regasm /tlb:FileName.tlb FileName.dll
gacutil /i FileName.dll

Da hab ich gerade was verwechselt. Entschuldigung.

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