Использование регистрации Бесплатный COM в Excel 2010

Я изо всех сил пытался использовать Registration Free COM для выполнения вызовов.NET из Excel 2010. По сути, я хотел иметь возможность вызывать некоторые функции.NET API в макросе Excel. Я создал API-оболочку в.NET и представил эту оболочку как библиотеку, вызываемую COM. Код для этого выглядит следующим образом:

Imports System
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.Assemblies

Namespace ExcelNXInterface

<Guid("bbe0089d-a732-4743-922b-180b30006fa4"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface _ExcelNXInterface
    <DispId(1)> Sub HighlightCompTag(ByRef tag As Long)
    <DispId(2)> Sub Echo(ByVal output As String)
End Interface

<ComVisible(True)>
<Guid("1376DE24-CC2D-46cb-8BF0-887A9CAF3014"), _
 ClassInterface(ClassInterfaceType.None), _
 ProgId("ExcelNXInterface.ExcelNXInterface")> Public Class ExcelNXInterface
    Implements _ExcelNXInterface

    Public _ExcelNXInterface

    Dim theSession As Session = Session.GetSession()
    Dim ufs As UFSession = UFSession.GetUFSession()

    Public Sub HighlightCompTag(ByRef tag As Long) Implements _ExcelNXInterface.HighlightCompTag

        Try
            ufs.Disp.SetHighlight(tag, 1)
            Echo("Component(s) Highlighted...")
        Catch e As NXException
            Echo("NX Exception is: {0} " + e.Message)
        Catch e As Exception
            Echo("Exception is: {0} " & e.Message)
            Echo("DONE!" & vbLf)
        End Try

    End Sub

    Sub Echo(ByVal output As String) Implements _ExcelNXInterface.Echo

        theSession.ListingWindow.Open()
        theSession.ListingWindow.WriteLine(output)
        theSession.LogFile.WriteLine(output)

    End Sub

End Class

End Namespace

Манифест для использования регистрации Free COM выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly 
  manifestVersion="1.0" 
  xmlns="urn:schemas-microsoft-com:asm.v1" 
  xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
  xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <assemblyIdentity
    type="win32"
    version="1.0.0.0" 
    name="ExcelNXInterface"/>

  <clrClass
      clsid="{bbe0089d-a732-4743-922b-180b30006fa4}"
      progid="ExcelNXInterface.ExcelNXInterface"
      threadingModel="Both"
      name="ExcelNXInterface.ExcelNXInterface">
  </clrClass>

  <file name = "ExcelNXInterface.dll"></file>   
</asmv1:assembly>

Для вызова обернутых функций.NET в Excel я использовал следующий код VBA:

Sub ExNX()
    Dim actCtx As Object
    Set actCtx = CreateObject("Microsoft.Windows.ActCtx")
    actCtx.Manifest = ThisWorkbook.Path & "\ExcelNXInterface.dll.manifest"

    Dim myNX As Object
    Set myNX = actCtx.CreateObject("ExcelNXInterface.ExcelNXInterface")

End Sub

Однако проблема заключается в том, что при вызове последней строки кода я получаю сообщение об ошибке выполнения 2147024894 (80070002) Метод "CreatObject" объекта IActCtx'завершился неудачей. Честно говоря, я не знаю, что я делаю неправильно, или даже если это возможно. Любая помощь или предложения с благодарностью.

Следует отметить, что DLL, манифест и рабочая книга находятся в одном каталоге. Также следует отметить, что VSTO, исполняемые файлы и / или установки не являются вариантами для меня. Вот почему я стараюсь использовать Excel.

0 ответов

Другие вопросы по тегам