title: How to use addin interface in Visual Studio 2008
body: <p>Following is a code sample of Addin I copied from MSDN(<a href="http://msdn.microsoft.com/en-us/library/vstudio/envdte.addin.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/vstudio/envdte.addin.aspx</a>) and did some modifications to. I create a Add-in project by VS2008 and paste the following code into it.</p>
  
  <p>But it seems that it does not work properly.</p>
  
  <p>1> DTE Add-in count before and after the  Update does not change</p>
  
  <p>2> Guid of the added addin is all zeros</p>
  
  <p>3> I get error: The parameter is incorrect, at code line: DTE.Solution.AddIns.Add</p>
  
  <pre><code>    Public Sub OnConnection(ByVal application As Object, ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef custom As Array) Implements IDTExtensibility2.OnConnection
      _applicationObject = CType(application, DTE2)
      _addInInstance = CType(addInInst, AddIn)
      Me.AddInExample(_applicationObject)
  End Sub
  Function BrowseFile() As String
      Dim OpenFileDialog1 As New OpenFileDialog
      OpenFileDialog1.Filter = "*.dll file (*.dll)|*.dll|All files (*.*)|*.*"
      OpenFileDialog1.FilterIndex = 1dialog
      OpenFileDialog1.RestoreDirectory = True
      If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
          'MsgBox(OpenFileDialog1.FileName)
          Return OpenFileDialog1.FileName
      End If
      Return ""
  End Function
  Sub AddInExample(ByVal DTE As DTE2)
      ' For this example to work correctly, there should be an add-in 
      ' available in the Visual Studio environment.
      ' Set object references.
      Dim addincoll As AddIns
      Dim addinobj As AddIn
      ' Register an add-in, check DTE Add-in count before and after the 
      ' Update.
      addincoll = DTE.AddIns
      MsgBox("AddIns collection parent name: " &amp; addincoll.Parent.Name)
      MsgBox("Number of Add-ins: " &amp; addincoll.Count)
      ' NOTE: Use regsvr32 for Visual C++, regasm for [Visual Basic 
      ' and Visual C#. Also, the pathname used below is an example only.
      'Shell("regasm F:\AddIns\RegExplore\Debug\regexplore.dll")
      'Shell("C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm e:\AddinTest1.dll")
      Shell("C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm " &amp; BrowseFile())
      addincoll.Update()
      MsgBox("Number of Add-ins: " &amp; addincoll.Count)
      addinobj = addincoll.Item(1)
      ' Connect the add-in if it is not already connected
      ' and list its SatelliteDLLPath and Guid.
      If addinobj.Connected = False Then
          addinobj.Connected = True
      End If
      MsgBox("Satellite DLL Path: " &amp; addinobj.SatelliteDllPath)
      MsgBox("DLL GUID: " &amp; addinobj.Guid)
      ' Activates a solution add-in so that it is available, then 
      'deactivates it.
      MsgBox(addinobj.ProgID)
      MsgBox(addinobj.Description)
      MsgBox(addinobj.Name)
      addinobj = DTE.Solution.AddIns.Add(addinobj.ProgID, addinobj.Description, addinobj.Name, False)
      DTE.Solution.AddIns.Item(1).Remove()
  End Sub
  </code></pre>