| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | Ein Tag mit Weitblick: ORCON-Kundentag auf dem TKE Testturm, eine Pressemitteilung
|
Autor
|
Thema: Custom DotNet dll für PSP (2665 mal gelesen)
|
2aCAD Mitglied

 Beiträge: 16 Registriert: 06.09.2006
|
erstellt am: 26. Mrz. 2010 22:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum, ich habe laut SDK eine dotNet-dll zur Einbindung im PSP2010 erstellt und in der Konfiguration eingebunden. Das funktioniert auch alles, die Testfunktionen kann ich aus PSP heraus ansprechen. Nun wollte ich die Funktionen der vererbten CCustomerNetModuleBase-Klasse (z.B. substitute) aber in einer weiteren Klasse dieser dll nutzen. Ich habe also folgendes in der zweiten Klasse versucht: Code:
Imports CMPNetModulePublic Class ClsTest Public Shared Sub PrepEx() Dim oCN As New CCustomerNetModuleBase Dim Test as String = oCN.Substitute("$PRGPATH") MessageBox.Show (Test) End Sub End Class
Zur Entwurfszeit werden auch keine Fehler initiiert. Erst zur Laufzeit kommt beim Zugriff auf das Objekt folgender Fehler: <Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.> Auch wenn die Sub nicht als shared definiert sondern instanziert wird, ergibt sich der gleiche Fehler. Auch eine Vererbung der CCustomerNetModuleBase-Klasse in diese zweite Klasse bringt keinen Erfolg. Hat jemand schon mal Ähnliches versucht und kann helfen? Ich würde mich über jeden Hinweis freuen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kieninj Mitglied Software Engineer
 Beiträge: 5 Registriert: 03.02.2010
|
erstellt am: 30. Mrz. 2010 09:13 <-- editieren / zitieren --> Unities abgeben:          Nur für 2aCAD
Hallo, Ein Objekt der Klasse CCustomerNetModuleBase kann man nicht selbst erzeugen. Besser gesagt, erzeugen kann man es schon, aber die Funktionen CallFunction() und Substitute() gehen nicht, weil sie keinen Kontext haben. Die Funktionen stehen nur zur Laufzeit des Kommandos zur Verfügung. Daher könnte man auch nicht das akuelle Objekt ("this") zwischenspeichern und z.B. in einem Dialog-Objekt verwenden um mit PSP zu kommunizieren. Wenn man so etwas realisieren möchte, sollte die CAI-Schnittstelle (Compass Application Interface) verwendet werden. Das kann man auch mit VB.NET oder C# machen. Jens coolOrange Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
T to the F Mitglied
 
 Beiträge: 398 Registriert: 06.06.2007 Win 7 x64 SP1 PrDS 2012 Ultimate Vault Pro 2012 i7 M640 8 GB Quadro FX 1800M
|
erstellt am: 30. Mrz. 2010 15:57 <-- editieren / zitieren --> Unities abgeben:          Nur für 2aCAD
|
2aCAD Mitglied

 Beiträge: 16 Registriert: 06.09.2006
|
erstellt am: 30. Mrz. 2010 18:29 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank für die Antworten. @kieninj Ich hatte so etwas fast befürchtet. Die CAI-Schnittstelle verwende ich bisher für diese Zwecke. Mit dem Call-Back-Objekt ist es halt möglich die Funktionen auch selbst instanziert zu verwenden. Ich wollte nur meine bisherigen Funktionen gern mit der CostumerNet-dll realisieren, weil dadurch eine zentrale Ablage der eigenen dll möglich wird und bei einer Aktualisierung nicht alle Clients angefasst werden müssen. Die CAI-Schnittstelle verlangt ja eine eigene dll auf den Clients. @T to the F Der Starke Name dient nur der Sicherheit. Damit kann die eigene dll überhapt erst in das zentrale Serververzeichnis gelegt und in der Konfiguration bekannt gemacht werden. Ohne Signierung mit Starken Namen lassen sich DotNet-dll's nicht aus einer Netzwerkablage verwenden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mrndf Mitglied Dipl. Inf.

 Beiträge: 26 Registriert: 12.07.2007 Wir können alles, außer Hochdeutsch;-) CAD: SolidWorks / SolidEdge / AutoCAD / Inventor PDM: PSP / PS Konfigurator: Confit / Logik Entwicklung: .NET (VB/C#) / C++ / ARX / Java DB: SQL Server / Oracle / DB2
|
erstellt am: 31. Mrz. 2010 13:38 <-- editieren / zitieren --> Unities abgeben:          Nur für 2aCAD
Es gibt noch eine andere Möglichkeit mti Hilfe der "COMPASS_Server.dll" (COM Server). Für die PSP Version 2010 kannst Du Dir den aktuellen User des Clients auch direkt angeln (vb.net): Dim cHelper As New Compass2000Server.CompassHelper user = cHelper.GetUser() Auf dem User kann man gaaaanz viele tolle Dinge machen. Die zetrale Ablage deiner DLL ist übrigens trotzdem möglich. Du musst nur die Sicherheitseinstellungen Deiner .net Umgebung entspechennd präparieren. (Klingt aber leichter als es ist, und hat mit dem Forum hier nichts zu tun!) Gruß Marc
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
2aCAD Mitglied

 Beiträge: 16 Registriert: 06.09.2006
|
erstellt am: 07. Apr. 2010 13:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Marc, vielen Dank für diesen Hinweis. Genau so habe ich mir das gewünscht. So habe ich das jetzt gemacht: Code:
Dim oCH As New Compass2000Server.CompassHelper Dim oCUser As Compass2000Server.CompassUser = oCH.Get
Am User hängen dann tatsächlich viele Funktionen, auch Substitute und CallFunction. Also vielen Dank noch mal Gruß Falk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |