| | | KISTERS 3DViewStation optimiert die Lizenzverwaltung für ihre Kunden, eine Pressemitteilung
|
Autor
|
Thema: COMException in Visual Studio (PowerCopy) (540 mal gelesen)
|
afaliwan Mitglied Ingenieur
Beiträge: 8 Registriert: 10.06.2016 CatiaV5 R32 SP2 Windows 10 Enterprise HP ZBook Fury 17.3 inch G8 Mobile Workstation
|
erstellt am: 24. Mai. 2023 13:32 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, spiele grade ein bisschen mit Visual Studio rum und bin am versuchen eine PowerCopy zu benutzen. Dazu nutze ich aktuell folgenden VB-Code (Auszug): Code:
Imports INFITF Imports KnowledgewareTypeLib Imports MECMOD [...] Dim catiaApp As INFITF.Application catiaApp = CType(GetObject(, "CATIA.Application"), INFITF.Application) Dim PartDocumentDest As PartDocument PartDocumentDest = catiaApp.ActiveDocument Dim PartDest As Part PartDest = PartDocumentDest.Part Dim factory As InstanceFactory factory = PartDest.GetCustomerFactory("InstanceFactory") factory.BeginInstanceFactory("Test", "C:\[...]\PowerCopy.CATPart") factory.BeginInstantiate() [...]
Der Code ist ähnlich aufgebaut zu der VBA Version. Die funktioniert auch super, aber in VS bekomme in der Zeile: Code: factory.BeginInstanceFactory("Test", "C:\[...]\PowerCopy.CATPart")
eine "HRESULT E_FAIL-Fehler" Fehlermeldung. Weiß jemand woher das kommen könnte? Oder hat hier jemand schonmal ähnliches probiert? Ich vermute aktuell, dass ich über VS aktuell keinen Zugriff auf die CATIAInstanceFactory habe. Danke vorab Zusatzinfo: CATIA V5 R32 SP2 + KT1 Lizenz Visual Studio Enterprise 2022 .NET Framework 4.8.1 detaillierte Fehlermeldung:
Zitat: System.Runtime.InteropServices.COMException HResult=0x80004005 Message=Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben. Source=TEST StackTrace: at MECMOD.InstanceFactory.BeginInstanceFactory(String& iNameOfReference, String& iNameOfDocument) at TEST.Form1.Button5_Click(Object sender, EventArgs e) in C:\[...]\source\repos\WindowsApp1\WindowsApp1\Form1.vb:line 539 at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) at TEST.My.MyApplication.Main(String[] Args) in :line 83
------------------ "Die Genialität einer Konstruktion liegt in ihrer Einfachheit. Kompliziert bauen kann jeder." - Sergej P. Koroljow Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Mai. 2023 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für afaliwan
Servus Hast du in der entsprechenden Catia Instanz die KT1-Lizenz? Hast du in dieser Instanz zuvor schon mal eine Powercopy versucht einzufügen? Wurde dann auch per EndInstanceFactory diese richtig beendet (auch im Fehlerfall)? Ggf vor BeginInstanceFactory dem erst ein EndInstanceFactory ausführen (um sicher zu gehen). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
afaliwan Mitglied Ingenieur
Beiträge: 8 Registriert: 10.06.2016 CatiaV5 R32 SP2 Windows 10 Enterprise HP ZBook Fury 17.3 inch G8 Mobile Workstation
|
erstellt am: 24. Mai. 2023 17:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, ja, ich habe die KT1-Lizenz in der aktuellen Catia Instanz. Ich kann in dieser Instanz problemlos Powercopies benutzen und einfügen. Ich kann diese auch ohne Probleme über VBA einfügen. Nur eben über Visual Studio geht es nicht. Ich bin gerade in einer komplett neuen Instanz mit gleichen Randbedingungen, auch hier das gleiche Muster. PowerCopy über VBA und direkt in Catia benutzen geht, aber in VS der gleiche Fehler. Ein zusäzliches EndInstanceFactory habe ich auch ausprobiert.
Während ich den Text hier am schreiben bin, konnte ich das ganze zum laufen bringen. Ich hab ein komplett neues VS Projekt erstellt und jetzt funktionierts... Anscheinend hab ich mich in dem alten Projekt wohl etwas verschachtelt mit den Referenzen, da sind auch ein paar zu viel. Falls das irgendwann mal jemand braucht:
Code: Imports INFITF Imports MECMODPublic Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim catiaApp As Application catiaApp = CType(GetObject(, "CATIA.Application"), Application) Dim PartDocumentDest As PartDocument = catiaApp.ActiveDocument Dim PartDest As Part = PartDocumentDest.Part Dim factory As InstanceFactory = PartDest.GetCustomerFactory("InstanceFactory") factory.BeginInstanceFactory("PowerCopy.1", "C:\[...]\PowerCopy.CATPart") factory.BeginInstantiate() Dim oAxis As Object = PartDest.FindObjectByName("Axis") Dim oPart As Object = PartDest.FindObjectByName("TestBody") factory.PutInputData("Absolute Axis System", oAxis) factory.PutInputData("PartBody", oPart) Dim Instance As ShapeInstance = factory.Instantiate factory.EndInstantiate() factory.EndInstanceFactory() PartDest.Update() End Sub End Class
Danke
------------------ "Die Genialität einer Konstruktion liegt in ihrer Einfachheit. Kompliziert bauen kann jeder." - Sergej P. Koroljow Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|