| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | [an error occurred while processing this directive]
Autor
|
Thema: Addin wird nicht in Inventor 2025 geladen (145 / mal gelesen)
|
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 246 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 17. Sep. 2024 09:25 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, habe folgendes Problem. Meine selbstgeschriebenen Addinn's werden bei Inventor 2025 zwar angezeigt aber nicht geladen (Automatisch/Entladen) auch wenn ich auf das Häkchen auf Geladen setze und auf OK drücke und danach den Zusatzmanager starte steht da wieder Automatisch/Entladen. Auf meinem Rechner, auf dem ich die AddIn's programmiere, laufen diese aber. Auf den Rechnern der Kollegen aber halt nicht. Ich habe schon einiges ausprobiert leider ohne Erfolg. Ich habe die AddIn's noch nicht nach -NET8 konvertiert, das habe ich zwar versucht, leider hat es nicht funktioniert. Hat jemand vielleicht auch diese Probleme? Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 17. Sep. 2024 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Hallo Andreas, bei mir hat die Konvertierung auf .NET 8 nicht ordentlich geklappt, so dass ich das Grundgerüst komplett neu aufgebaut habe. Das neue Add-In hat dann natürlich gut geklappt. Den bestehenden Code baue ich dann Stück für Stück ein. Ist zwar viel Arbeit, aber man kann dabei gleich ausmisten. Ich konnte das alte Add-In im Inventor 2025 laden, aber es hat nicht richtig funktioniert. Bevor ich dann ewig den genauen Fehler suche und dann etliche "Folgefehler" erhalte, habe ich mich gleich für den oben beschriebenen Weg entschieden. VG MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2586 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 17. Sep. 2024 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Moin Wenn das Addin mit dem Zielframework .Net 8 kompiliert, dürfte die Konvertierung fehlerfrei gelaufen sein. Wurde denn überhaupt das Zielframework umgestellt? Inventor 2025 lädt offiziell nichts älteres mehr. Alternativ könnte man ja das VisualStudio als Debugger lassen und in der Activate-Sub mal schauen was ihm nicht gefällt. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 246 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 18. Sep. 2024 10:48 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe es jetzt versucht das Addin in .Net8 zu konvertieren und bekomme fehler bei der Button Implementierung: Code: ' Create the control definitions for button with icon Dim Stückliste_Button_IconIPictureDisp As Object = System.Type.Missing Stückliste_Button_IconIPictureDisp = Microsoft.VisualBasic.Compatibility.VB6.Support.IconToIPicture(System.Drawing.Icon.FromHandle(My.Resources.Stueckliste.GetHicon())) m_StücklisteButton = controlDefs.AddButtonDefinition("", "StücklisteExportieren", CommandTypesEnum.kFilePropertyEditCmdType, Nothing, Nothing, Nothing, Stückliste_Button_IconIPictureDisp, Stückliste_Button_IconIPictureDisp)
Fehler: BC30456 "Compatibility" ist kein Member von "Microsoft.VisualBasic". Mit der Autodesk-Vorlage für Inventor 2025 ist die Button Implementierung erstmal auskommentiert. Ich habe dann versucht ein Button zu erstellen. 1. habe ich eine neue Resource-Datei hinzugefügt 2. habe ich in den Ressource-Explorer neue Resource "YourBigImage" hinzugefügt jedoch wird immer noch ein Fehler in der Zeiler: Code: Dim largeIcon As stdole.IPictureDisp = PictureDispConverter.ToIPictureDisp(My.Resources.YourBigImage)
Fehler: BC30456 "YourBigImage" ist kein Member von InventorAddIn1.My.Resources". Dann habe ich den Code wie folgt geändert:
Code: Dim largeIcon As stdole.IPictureDisp = PictureDispConverter.ToIPictureDisp(My.Resources.Resource.YourBigImage)
dann kann ich auch "YourBisImage" auswählen, jedoch dann bekomme ich wieder einen neue Fehler BC30518 Fehler bei der Überladungsauflösung, da keine zugreifbare "ToIPictureDisp" mit diesen Argumenten aufgerufen werden kann: "Public Shared Function ToIPictureDisp(icon As Icon) As IPictureDisp": Der Wert vom Typ "Byte()" kann nicht in "Icon" konvertiert werden. "Public Shared Function ToIPictureDisp(bmp As Bitmap) As IPictureDisp": Der Wert vom Typ "Byte()" kann nicht in "Bitmap" konvertiert werden.
jetzt weiß ich leider nicht weiter. Ich selber bin nur ein "Hobby-Programmierer", kann mir jemad da weiter helfen? Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2586 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 18. Sep. 2024 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Moin Falls noch nicht vorhanden, einen COM-Verweis auf stdole setzen. Erstelle bitte in deinem Projekt eine neu VB Klassendatei, nenne sie z.B. "PictureDispConverter.vb", lösch den eventuell vorhandenen Inhalt raus und füge folgendes ein: Code: Imports System.Runtime.InteropServices' Class used to convert bitmaps and icons from their .Net native types into ' an IPictureDisp object which is what the Inventor API requires. A typical ' usage is shown below where MyIcon is a bitmap or icon that's available ' as a resource of the project. ' ' Example: ' Dim smallIcon As stdole.IPictureDisp = PictureDispConverter.ToIPictureDisp(My.Resources.MyIcon) Public NotInheritable Class PictureDispConverter <DllImport("OleAut32.dll", EntryPoint:="OleCreatePictureIndirect", ExactSpelling:=True, PreserveSig:=False)> Private Shared Function OleCreatePictureIndirect(ByVal picdesc As Object, ByRef iid As Guid, ByVal fOwn As Boolean) As stdole.IPictureDisp End Function Shared iPictureDispGuid As Guid = GetType(stdole.IPictureDisp).GUID Private NotInheritable Class PICTDESC Private Sub New() End Sub 'Picture Types Public Const PICTYPE_BITMAP As Short = 1 Public Const PICTYPE_ICON As Short = 3 <StructLayout(LayoutKind.Sequential)> Public Class Icon Friend cbSizeOfStruct As Integer = Marshal.SizeOf(GetType(PICTDESC.Icon)) Friend picType As Integer = PICTDESC.PICTYPE_ICON Friend hicon As IntPtr = IntPtr.Zero Friend unused1 As Integer Friend unused2 As Integer Friend Sub New(ByVal icon As System.Drawing.Icon) Me.hicon = icon.ToBitmap().GetHicon() End Sub End Class <StructLayout(LayoutKind.Sequential)> Public Class Bitmap Friend cbSizeOfStruct As Integer = Marshal.SizeOf(GetType(PICTDESC.Bitmap)) Friend picType As Integer = PICTDESC.PICTYPE_BITMAP Friend hbitmap As IntPtr = IntPtr.Zero Friend hpal As IntPtr = IntPtr.Zero Friend unused As Integer Friend Sub New(ByVal bitmap As System.Drawing.Bitmap) Me.hbitmap = bitmap.GetHbitmap() End Sub End Class End Class Public Shared Function ToIPictureDisp(ByVal icon As System.Drawing.Icon) As stdole.IPictureDisp Dim pictIcon As New PICTDESC.Icon(icon) Return OleCreatePictureIndirect(pictIcon, iPictureDispGuid, True) End Function Public Shared Function ToIPictureDisp(ByVal bmp As System.Drawing.Bitmap) As stdole.IPictureDisp Dim pictBmp As New PICTDESC.Bitmap(bmp) Return OleCreatePictureIndirect(pictBmp, iPictureDispGuid, True) End Function End Class
Danach kopierst du mal zur Sicherheit deine StandardAddin.vb, weil Backup haben und nicht brauchen ist besser. Die Buttondefinition machst du dann so:
Code:
Dim controlDefs As Inventor.ControlDefinitions = g_inventorApplication.CommandManager.ControlDefinitionsDim largeIcon As stdole.IPictureDisp = PictureDispConverter.ToIPictureDisp(My.Resources.Resource.YourBigImage) Dim smallIcon As stdole.IPictureDisp = PictureDispConverter.ToIPictureDisp(My.Resources.Resource.YourSmallImage) m_StücklisteButton = controlDefs.AddButtonDefinition("", "StücklisteExportieren", CommandTypesEnum.kFilePropertyEditCmdType, AddInClientID, Nothing, Nothing, Nothing, smallIcon, largeIcon)
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 246 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 18. Sep. 2024 15:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich glaube dass Problem ist das ich die zwei .BMP Dateien nicht richtig in die Resource-Datei angebunden bekomme. Wenn ich "YourBigImage.bmp" bei Import als "System.Byte[](WPF)" hinzufüge dann habe ich zugriff auf diese
Code: Dim largeIcon As stdole.IPictureDisp = PictureDispConverter.ToIPictureDisp(My.Resources.Resource.YourBigImage)
jedoch dann meckert die Funktion ToIPictureDisp BC30518 Fehler bei der Überladungsauflösung, da keine zugreifbare "ToIPictureDisp" mit diesen Argumenten aufgerufen werden kann: "Public Shared Function ToIPictureDisp(icon As Icon) As IPictureDisp": Der Wert vom Typ "Byte()" kann nicht in "Icon" konvertiert werden. "Public Shared Function ToIPictureDisp(bmp As Bitmap) As IPictureDisp": Der Wert vom Typ "Byte()" kann nicht in "Bitmap" konvertiert werden. InventorAddIn2 C:\Users\wilczek.QSQ-ERKELENZ\source\repos\InventorAddIn2\StandardAddInServer.vb 31
füge ich jedoch "YourBigImage.bmp" als System.Drawing.Icon(Windows Forms) hinzu, dann hat die "Resource.resx" Datei direckt ein Fehler. Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand Fehler (aktiv) Ein Aufrufziel hat einen Ausnahmefehler verursacht. InventorAddIn2 C:\Users\wilczek.QSQ-ERKELENZ\source\repos\InventorAddIn2\Resource.resx 1
Ich habe das Projekt einfach gezipt und hochgeladen. Vielleicht siehst Du wo der Fehler liegt. Ich komme da einfach nicht weiter. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2586 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 18. Sep. 2024 22:39 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Moin Die Resourcendatei war vermackt. Ich hab die gelöscht und neu erstellt. Dabei fiel mir auf, dass beim neu erzeugen "vergessen" wird den Namespace My.Resources zu erzeugen. Im Projektbrowser mit rechter Maustaste auf die .resx und "Öffnen mit" auswählen. In der Auswahl der alten Resourceneditor auswählen. Einmal öffnen der Datei und direkt wieder schließen sollte genügen. Danach kann man wieder mit dem neuen Editor weiterarbeiten. In der Projektdatei .vbproj muss derzeit die Zeile
Code: <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
mit einem Texteditor herausgelöscht werden, da sonst die ganze Zeit Warnungen Nr. CA1416 angezeigt werden. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 246 Registriert: 05.08.2004 Inventor 2020 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 19. Sep. 2024 13:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, also ich habe es vorerst so hinbekommen. Deine Lösung werde ich aber noch versuchen denn dann muss ich nicht so viel in meinem Code ändern. Die Icons werden geladen sehen wohl etwas anders aus, also irgendwie qualitativ schlechter aber vorerst muss es so reichen.
Code: Dim IconIPictureDisp As Object = System.Type.Missing IconIPictureDisp = Buttons_Konvertieren("AW_Tools.ICON.bmp") ButtonDEF = controlDefs.AddButtonDefinition("", "Daten", Inventor.CommandTypesEnum.kQueryOnlyCmdType, AddInCLSIDString, , , IconIPictureDisp, IconIPictureDisp)
- Code: Private Function Buttons_Konvertieren(ByVal Iconname As String) As Object Dim ButtonIconIPictureDisp As Object = System.Type.Missing Dim ButtonBodyIconStream As System.IO.Stream = Me.GetType().Assembly.GetManifestResourceStream(Iconname) Dim ButtonBodyIconImage As System.Drawing.Image = New System.Drawing.Bitmap(ButtonBodyIconStream) Return ImageToPictureConverter.Convert(ButtonBodyIconImage) End Function
Code: #Region "ImageToPictureConverter" Public NotInheritable Class ImageToPictureConverter Inherits System.Windows.Forms.AxHost Private Sub New() MyBase.New(Nothing) End Sub Public Shared Function Convert(ByVal image As System.Drawing.Image) As stdole.IPictureDisp Return CType(System.Windows.Forms.AxHost.GetIPictureDispFromPicture(image), stdole.IPictureDisp) End Function End Class #End Region
Danke dir. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|