Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Библиотека классов


Автор: Mobi 4.5.2010, 15:44
Здравствуйте.
Вопрос в следующем:
Есть шаблон VB.NET, Addin приложения для SolidWorks API, он состоит из файла библиотеки классов (.vb) , при компиляции шаблона в интерфейс SolidWorks добавляются новые инструменты и т.п. формируется библиотека Addin.dll, нужно прикрутить все к проекту Windows Forms, да так чтобы выполнить все процедуры библиотеки Addin.dl при каком либо событии формы.
Заранее благодарю за помощь.

В архиве проект...

Автор: diadiavova 4.5.2010, 15:51
Добавь в винформ приложение ссылку на эту библиотеку и выполняй что нужно в обработчиках событий. Какие с этим проблемы то? Или я чего-то не понял?

Автор: Mobi 4.5.2010, 15:59
В общем  нужно чтобы отрабатывались все методы библиотеки которые выполняются при компиляции этой самой библиотеки, при событии винформы например онклик.   smile 
Код

Imports System
Imports System.Collections
Imports System.Reflection
Imports System.Runtime.InteropServices

Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports SolidWorks.Interop.swpublished
Imports SolidWorksTools
Imports SolidWorksTools.File

<Guid("58c68ff3-be36-4a9a-bb29-2ef89642385d")> _
    <ComVisible(True)> _
    <SwAddin( _
        Description:="SwVBAddin description", _
        Title:="SwVBAddin", _
        LoadAtStartup:=True _
        )> _
        Public Class SwAddin
    Implements SolidWorks.Interop.swpublished.SwAddin

#Region "Local Variables"
    Dim WithEvents iSwApp As SldWorks
    Dim iCmdMgr As ICommandManager
    Dim addinID As Integer
    Dim openDocs As Hashtable
    Dim SwEventPtr As SldWorks
    'Dim ppage As UserPMPage

    ' Public Properties
    ReadOnly Property SwApp() As SldWorks
        Get
            Return iSwApp
        End Get
    End Property

    ReadOnly Property CmdMgr() As ICommandManager
        Get
            Return iCmdMgr
        End Get
    End Property

    ReadOnly Property OpenDocumentsTable() As Hashtable
        Get
            Return openDocs
        End Get
    End Property
#End Region
#Region "SolidWorks Registration"

    <ComRegisterFunction()> Public Shared Sub RegisterFunction(ByVal t As Type)
        ' Get Custom Attribute: SwAddinAttribute
        Dim attributes() As Object
        Dim SWattr As SwAddinAttribute = Nothing

        attributes = System.Attribute.GetCustomAttributes(GetType(SwAddin), GetType(SwAddinAttribute))

        If attributes.Length > 0 Then
            SWattr = DirectCast(attributes(0), SwAddinAttribute)
        End If

        Dim hklm As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
        Dim hkcu As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser

        Dim keyname As String = "SOFTWARE\SolidWorks\Addins\{" + t.GUID.ToString() + "}"
        Dim addinkey As Microsoft.Win32.RegistryKey = hklm.CreateSubKey(keyname)
        addinkey.SetValue(Nothing, 0)
        addinkey.SetValue("Description", SWattr.Description)
        addinkey.SetValue("Title", SWattr.Title)

        keyname = "Software\SolidWorks\AddInsStartup\{" + t.GUID.ToString() + "}"
        addinkey = hkcu.CreateSubKey(keyname)
        addinkey.SetValue(Nothing, SWattr.LoadAtStartup, Microsoft.Win32.RegistryValueKind.DWord)
    End Sub
    <ComUnregisterFunction()> Public Shared Sub UnregisterFunction(ByVal t As Type)
        Dim hklm As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
        Dim hkcu As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser

        Dim keyname As String = "SOFTWARE\SolidWorks\Addins\{" + t.GUID.ToString() + "}"
        hklm.DeleteSubKey(keyname)

        keyname = "Software\SolidWorks\AddInsStartup\{" + t.GUID.ToString() + "}"
        hkcu.DeleteSubKey(keyname)
    End Sub
#End Region
#Region "ISwAddin Implementation"

    Function ConnectToSW(ByVal ThisSW As Object, ByVal Cookie As Integer) As Boolean Implements SolidWorks.Interop.swpublished.SwAddin.ConnectToSW
        iSwApp = ThisSW
        addinID = Cookie

        ' Setup callbacks
        iSwApp.SetAddinCallbackInfo(0, Me, addinID)

        ' Setup the Command Manager
        iCmdMgr = iSwApp.GetCommandManager(Cookie)
        AddCommandMgr()

        'Setup the Event Handlers
        SwEventPtr = iSwApp
        openDocs = New Hashtable
        'AttachEventHandlers()

        'Setup Sample Property Manager

        ConnectToSW = True
    End Function

    Function DisconnectFromSW() As Boolean Implements SolidWorks.Interop.swpublished.SwAddin.DisconnectFromSW
        RemoveCommandMgr()
        'DetachEventHandlers()
        iSwApp = Nothing
        'The addin _must_ call GC.Collect() here in order to retrieve all managed code pointers 
        GC.Collect()
        DisconnectFromSW = True
    End Function
#End Region

#Region "UI Methods"
    Public Sub AddCommandMgr()

        Dim cmdGroup As ICommandGroup
        Dim iBmp As New BitmapHandler
        Dim thisAssembly As Assembly

        Dim cmdIndex0 As Integer
        Dim Title As String = "Свойства"
        Dim ToolTip As String = "Удалить"

        Dim docTypes() As Integer = {swDocumentTypes_e.swDocASSEMBLY, _
                                       swDocumentTypes_e.swDocDRAWING, _
                                       swDocumentTypes_e.swDocPART}
        thisAssembly = System.Reflection.Assembly.GetAssembly(Me.GetType())

        cmdGroup = iCmdMgr.CreateCommandGroup(1, Title, ToolTip, "", -1)

        cmdIndex0 = cmdGroup.AddCommandItem("Конструктор свойств", -1, "Конструктор свойств", "Конструктор свойств", 0, "CreateCube", "", 0)
        'cmdIndex1 = cmdGroup.AddCommandItem("Show PMP", -1, "Display sample property manager", "Show PMP", 2, "ShowPMP", "PMPEnable", 2)

        cmdGroup.HasToolbar = False
        cmdGroup.HasMenu = True
        cmdGroup.Activate()

        thisAssembly = Nothing
        'iBmp.Dispose()
    End Sub
    Public Sub RemoveCommandMgr()
        iCmdMgr.RemoveCommandGroup(1)
    End Sub
#End Region
    Sub CreateCube()
        Shell("C:\Program Files\SolidWorks Corp\SolidWorks\Addins\Конструктор свойств.exe", AppWinStyle.NormalFocus)
    End Sub
End Class


Автор: diadiavova 4.5.2010, 16:02
Цитата(Mobi @  4.5.2010,  16:59 Найти цитируемый пост)
все методы библиотеки которые выполняются при компиляции этой самой библиотеки

 smile Это как это?

Автор: Mobi 4.5.2010, 16:05
Еслиб я знал то не спрашивал… smile 
Я наверно не туда копаю?

Автор: diadiavova 4.5.2010, 16:07
Цитата(Mobi @  4.5.2010,  17:05 Найти цитируемый пост)
Я наверно не туда копаю? 

Скорей всего. Тогда опиши проблему.

Автор: Mobi 4.5.2010, 16:12
Все просто smile 
Нужно чтоб выполнился весь код см. выше, при клике на винформе а не при компиляции как "библиотеки классов".
Когда программа компилируется в виде библиотеки классов все ок, но нужно чтоб она на других машинах проделала тоже самое без компилятора естесно…

Автор: diadiavova 4.5.2010, 16:13
А почему просто проект установки не создать?

Автор: Mobi 4.5.2010, 16:17
Ух ты, а можно в деталях пожалуйста  smile 

Автор: diadiavova 4.5.2010, 16:26
http://msdn.microsoft.com/ru-ru/library/6hbb4k3e(VS.90).aspx

Автор: Mobi 4.5.2010, 16:29
Спсиб, будем посмотреть... smile

Автор: Mobi 4.5.2010, 17:27
Подскажите пожалуйста как в моем случае нужно создать проект установки??

Автор: diadiavova 4.5.2010, 17:41
В меню Файл-> Добавить->Новый проект. В диалоге, в разделе Другие типы проектов, выбрать Проект установки. Далее все настройки в нём выполнять, там есть редактор реестра, файловой системы и мног чего другого. Всего так просто не опишешь, потому что возможностей очень много. Вот отсюда можно начать
http://msdn.microsoft.com/ru-ru/library/2kt85ked(VS.90).aspx

Автор: Mobi 4.5.2010, 17:48
А не подскажите как добавить библиотеку классов так чтоб она скомпилировалась?

Автор: diadiavova 4.5.2010, 21:16
В контекстном меню проекта установки(В обозревателе решений) выбери Добавить->Выходной элемент проекта, в открывшемся диалоговом окне вверху выбери проект, выходные данные которого устанавливаешьи в списке выбери Основные выходные файлы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)