Использование регистрации Бесплатный 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.