Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Hinweismeldung

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 Autodesk Produkte
Autor Thema:  Hinweismeldung (1194 mal gelesen)
Fiedel93felix
Mitglied
Konstrukteur


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

Beiträge: 448
Registriert: 19.02.2014

Autodesk Inventor 2014
Microsoft Visual Basic 2010

erstellt am: 20. Apr. 2015 08:33    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 liebe Gemeinde,
Ich habe mir vor vor längerer Zeit mal ein ADD-In erstellt welches mir ein Button generiert.
jetzt wollte ich daran was ändern bzw habe was geändert da sind mir ein paar Hinweise in der Fehlerbox aufgefallen.
mein Code funktioniert ohne Probleme, trotzdem sind Warnungen ja immer nichts wirklich gutes.
Daher wollte ich fragen ob mir diese mal zum verhängniss werden können, bzw wie ich diese umgehen könnte. (Vorallem Hinweiß 3)

Hinweiß 1:
Es wurde ein Verweis auf die eingebettete Interopassembly "stdole" aufgrund eines indirekten Verweises auf diese Assembly aus Assembly "Autodesk.Inventor.Interop" erstellt. Ändern Sie ggf. für beide Assembly die Eigenschaft "Interoptypen einbetten".

Hinweiß 2:
Es wurde ein Verweis auf die eingebettete Interopassembly "stdole" aufgrund eines indirekten Verweises auf diese Assembly aus Assembly "Microsoft.VisualBasic.Compatibility" erstellt. Ändern Sie ggf. für beide Assembly die Eigenschaft "Interoptypen einbetten".

Hinweiß 3:
"Public Function ImageToIPictureDisp(img As System.Drawing.Image) As Object" ist veraltet: "Microsoft.VisualBasic.Compatibility.* classes are obsolete and supported within 32 bit processes only.

Hier noch der Code Dazu:

Imports Inventor
Imports System.Runtime.InteropServices
Imports Microsoft.Win32

Namespace Bild
    <ProgIdAttribute("Bild.StandardAddInServer"), _
    GuidAttribute("94cc5267-d85f-4ec8-83e5-ea0e5952c4b4")> _
    Public Class StandardAddInServer
        Implements Inventor.ApplicationAddInServer

        ' Inventor application object.
        Private m_inventorApplication As Inventor.Application
        Private m_ClientID As String
        Private WithEvents m_featureHalloButtonDef As ButtonDefinition

#Region "ApplicationAddInServer Members"

        Public Sub Activate(ByVal addInSiteObject As Inventor.ApplicationAddInSite, ByVal firstTime As Boolean) Implements Inventor.ApplicationAddInServer.Activate

            ' This method is called by Inventor when it loads the AddIn.
            ' The AddInSiteObject provides access to the Inventor Application object.
            ' The FirstTime flag indicates if the AddIn is loaded for the first time.

            ' Initialize AddIn members.
            m_inventorApplication = addInSiteObject.Application

            ' TODO:  Add ApplicationAddInServer.Activate implementation.
            ' e.g. event initialization, command creation etc.

            ' Convert the Image to a Picture.
            Dim picture As stdole.IPictureDisp
(-> Hinweis 3)    picture = Microsoft.VisualBasic.Compatibility.VB6.ImageToIPictureDisp(My.Resources.Hallo)  (-> Hinweis 3)
           
            ' Create the button definition.
            Dim controlDefs As ControlDefinitions
            controlDefs = m_inventorApplication.CommandManager.ControlDefinitions

            m_featureHalloButtonDef = controlDefs.AddButtonDefinition("Weiter zur Zeichnung", "BAddInHallo", _
                                                                    CommandTypesEnum.kQueryOnlyCmdType, _
                                                                    m_ClientID, _
                                                                  "Kollisonssprüfung und Zeichnung öffnen", _
                                                                "Weiter zur Zeichnung", _
                                                                picture)


            If firstTime Then
                ' Create a new command bar (toolbar) and make it visible.
                'Dim commandBars As CommandBars
                'commandBars = m_inventorApplication.UserInterfaceManager.CommandBars
                'Dim commandBar As CommandBar
                'commandBar = commandBars.Add("Buttons", "BAddInButtons(", , m_ClientID)
                'commandBar.Visible = True

                'Add the controlto the command bar.
                'commandBar.Controls.AddButton(m_featureCountButtonDef)


                ' Get the part features command bar.
                Dim partCommandBar As Inventor.CommandBar
                partCommandBar = m_inventorApplication.UserInterfaceManager.CommandBars.Item("AMxAssemblyPanelCmdBar")
                ' Add a button to the command bar, defaulting to the end position.
                partCommandBar.Controls.AddButton(m_featureHalloButtonDef)

            End If


        End Sub

        Public Sub Deactivate() Implements Inventor.ApplicationAddInServer.Deactivate

            ' This method is called by Inventor when the AddIn is unloaded.
            ' The AddIn will be unloaded either manually by the user or
            ' when the Inventor session is terminated.

            ' TODO:  Add ApplicationAddInServer.Deactivate implementation

            ' Release objects.
            m_inventorApplication = Nothing

            System.GC.Collect()
            System.GC.WaitForPendingFinalizers()
        End Sub

        Public ReadOnly Property Automation() As Object Implements Inventor.ApplicationAddInServer.Automation

            ' This property is provided to allow the AddIn to expose an API
            ' of its own to other programs. Typically, this  would be done by
            ' implementing the AddIn's API interface in a class and returning
            ' that class object through this property.

            Get
                Return Nothing
            End Get

        End Property

        Public Sub ExecuteCommand(ByVal commandID As Integer) Implements Inventor.ApplicationAddInServer.ExecuteCommand

            ' Note:this method is now obsolete, you should use the
            ' ControlDefinition functionality for implementing commands.

        End Sub

#End Region

        Private Sub m_featureHalloButtonDef_OnExecute(ByVal Context As Inventor.NameValueMap) Handles m_featureHalloButtonDef.OnExecute

            Dim Ausgangspfad As String
            Ausgangspfad = "S:\Austausch\Fiedler\1. Projektarbeit\Test - Kopie"
            Dim ThisApplication As Inventor.Application
            ThisApplication = GetObject(, "Inventor.Application")

            If ThisApplication.ActiveDocument Is Nothing Then
                MsgBox("Keine Baugruppe geöffnet")
                Exit Sub
            End If


            Dim oAsmDoc As AssemblyDocument
            If TypeOf ThisApplication.ActiveDocument Is AssemblyDocument Then
                oAsmDoc = ThisApplication.ActiveDocument
            Else : MsgBox("Geht nur in Baugruppen")
                Exit Sub
            End If

            Dim oAsmDef As AssemblyComponentDefinition
            oAsmDef = oAsmDoc.ComponentDefinition


            Dim oAllOccurrences As ObjectCollection
            oAllOccurrences = ThisApplication.TransientObjects.CreateObjectCollection(oAsmDef.Occurrences)


            Dim oResults As InterferenceResults
            Try
                oResults = oAsmDef.AnalyzeInterference(oAllOccurrences)
            Catch ex As Exception
                MsgBox("Keine Kollisionen gefunden")
                Exit Sub
            End Try

            Dim oResult As InterferenceResult
            Dim totalBody As SurfaceBody
            For Each oResult In oResults
                If totalBody Is Nothing Then

                    totalBody = oResult.InterferenceBody
                Else

                    Call ThisApplication.TransientBRep.DoBoolean(totalBody, oResult.InterferenceBody, BooleanTypeEnum.kBooleanTypeUnion)
                End If
            Next

            If totalBody Is Nothing Then
                MsgBox("Keine Kollission gefunden")
            Else
                MsgBox("Kollisison vorhanden")
            End If
            Dim oDoc As Inventor.Document
            Dim Pfad As String
            oDoc = ThisApplication.ActiveDocument
            Pfad = Left(oDoc.FullDocumentName, Len(oDoc.FullDocumentName) - 3)

            ThisApplication.SilentOperation = True
            ThisApplication.Documents.Open(Pfad & "idw")
            ThisApplication.SilentOperation = False

            Dim oDrawDoc As Inventor.DrawingDocument
            oDrawDoc = ThisApplication.ActiveDocument
            Pfad = oDrawDoc.FullDocumentName
            Dim oFile As File
            oFile = oDrawDoc.File
            Dim oFD As FileDescriptor
            For i = 1 To 10
                Try
                    oFD = oFile.ReferencedFileDescriptors.Item(i)
                    If oFD.FullFileName = Ausgangspfad & "\AN.iam" Then
                        Call oFD.ReplaceReference(Left(Pfad, Len(Pfad) - 3) & "iam")

                        Call Create_prop(oDrawDoc, "Status", "Zeichnung")

                        Exit Sub
                    End If
                Catch ex As Exception
                End Try
            Next

        End Sub

        Sub Create_prop(ByVal oDoc As Document, ByVal prop As String, ByVal prop_value As String)
            Dim opropsets As PropertySets
            Dim opropset As PropertySet
            Dim oUserPropertySet As PropertySet
            Dim i As Integer
            opropsets = oDoc.PropertySets
            For Each opropset In opropsets
                If opropset.Name = "Inventor User Defined Properties" Then oUserPropertySet = opropset
            Next opropset
            ' If Property does not exist then add the new Property
            On Error Resume Next
            Call oUserPropertySet.Add(prop_value, prop)
            ' Try to set the Property value if it already exists
            For i = 1 To oUserPropertySet.Count
                If oUserPropertySet.Item(i).Name = prop Then oUserPropertySet.Item(i).Value = prop_value
            Next i
        End Sub
        Sub Set_Property(ByVal oDoc As Document, ByVal prop_name As String, ByVal prop_value As String)
            Dim opropsets As PropertySets
            Dim odtPropertySet As PropertySet
            opropsets = oDoc.PropertySets
            odtPropertySet = opropsets.Item("Inventor User Defined Properties")
            odtPropertySet.Item(prop_name).Value = prop_value
        End Sub

    End Class

End Namespace

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 20. Apr. 2015 19:18    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 Fiedel93felix 10 Unities + Antwort hilfreich

Hallo

Naja, wenn du immer brav einen Bogen um 64-bit machst, wird's noch eine Weile ohne Probleme gehen. Füge diesen Code in eine Datei PictureDispConverter.vb ein:

Code:

Imports System
Imports System.Drawing
Imports System.Runtime.InteropServices

Public Module PictureDispConverter

    'IPictureDisp guid
    Public iPictureDispGuid As Guid = GetType(stdole.IPictureDisp).GUID

    'Converts an Icon into a IPictureDisp
    Public Function ToIPictureDisp(ByVal ico As Icon) As stdole.IPictureDisp

        Dim pictIcon As New PICTDESC.Icon(ico)
        Return PictureDispConverter.OleCreatePictureIndirect(pictIcon, iPictureDispGuid, True)
    End Function

    'Converts an image into a IPictureDisp
    Public Function ToIPictureDisp(ByVal picture As Image) As stdole.IPictureDisp

        Dim bm As Bitmap
        If TypeOf picture Is Bitmap Then
            bm = picture
        Else
            bm = New Bitmap(picture)
        End If
        Dim pictBit As New PICTDESC.Bitmap(bm)
        Return PictureDispConverter.OleCreatePictureIndirect(pictBit, iPictureDispGuid, True)
    End Function


    <DllImport("OleAut32.dll", EntryPoint:="OleCreatePictureIndirect", ExactSpelling:=True, PreserveSig:=False)> _
    Private Function OleCreatePictureIndirect(<MarshalAs(UnmanagedType.AsAny)> ByVal picdesc As Object, ByRef iid As Guid, ByVal fOwn As Boolean) As stdole.IPictureDisp
    End Function

    Private ReadOnly hCollector As New HandleCollector("Icon handles", 1000)


    'PICTDESC is a union in native, so we'll just
    'define different ones for the different types
    'the "unused" fields are there to make it the right
    'size, since the struct in native is as big as the biggest
    'union.
    Private Class PICTDESC

        'Picture Types
        Public Const PICTYPE_UNINITIALIZED As Short = -1
        Public Const PICTYPE_NONE As Short = 0
        Public Const PICTYPE_BITMAP As Short = 1
        Public Const PICTYPE_METAFILE As Short = 2
        Public Const PICTYPE_ICON As Short = 3
        Public Const PICTYPE_ENHMETAFILE As Short = 4

        <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 = 0
            Friend unused2 As Integer = 0

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

            Friend Sub New(ByVal bitmap As System.Drawing.Bitmap)
                Me.hbitmap = bitmap.GetHbitmap()
            End Sub
        End Class

    End Class

End Module


Aus deiner StandardAddIn.dll rufst du es mit

Code:
' Convert the Image to a Picture.
    Dim picture As Object
    picture = PictureDispConverter.ToIPictureDisp(My.Resources.Hallo)

auf. Soweit die Theorie.

------------------
MfG
Ralf

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

Fiedel93felix
Mitglied
Konstrukteur


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

Beiträge: 448
Registriert: 19.02.2014

Autodesk Inventor 2014
Microsoft Visual Basic 2010

erstellt am: 21. Apr. 2015 09:50    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

Vielen Dank Ralf, jetzt sind 2 von 3 Warnungen behoben 

MfG Felix

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 21. Apr. 2015 12:59    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 Fiedel93felix 10 Unities + Antwort hilfreich

Hallo

Welcher ist noch offen und wo taucht er auf?

------------------
MfG
Ralf

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

Fiedel93felix
Mitglied
Konstrukteur


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

Beiträge: 448
Registriert: 19.02.2014

Autodesk Inventor 2014
Microsoft Visual Basic 2010

erstellt am: 21. Apr. 2015 14:02    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

Es wurde ein Verweis auf die eingebettete Interopassembly "stdole" aufgrund eines indirekten Verweises auf diese Assembly aus Assembly "Autodesk.Inventor.Interop" erstellt. Ändern Sie ggf. für beide Assembly die Eigenschaft "Interoptypen einbetten".

Die Warnung ist noch übrig

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 21. Apr. 2015 14:50    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 Fiedel93felix 10 Unities + Antwort hilfreich

Hallo

Kann es sein, das du die Zeile noch drin hast?

Code:
Dim picture As stdole.IPictureDisp

------------------
MfG
Ralf

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

Fiedel93felix
Mitglied
Konstrukteur


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

Beiträge: 448
Registriert: 19.02.2014

Autodesk Inventor 2014
Microsoft Visual Basic 2010

erstellt am: 21. Apr. 2015 15: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

nein die Zeile steht nicht drin, aber in deinem Code steht Code steht doch mehrmals
    stdole.IPictureDisp

MfG Felix

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