在Excel 2010中使用注册免费COM

我一直在努力使用免费注册COM来从Excel 2010进行.NET调用。本质上,我希望能够在Excelmacros中调用一些.NET API函数。 我在.NET中创build了一个包装器API,并将这个包装器作为一个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 

使用免注册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> 

要在Excel中调用包装的.NET函数,我使用了下面的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)对象IActCtx的方法'CreatObject'失败。 我真的不知道我做错了什么,或者即使这是可能的。 任何帮助或build议,不胜感激。

应该指出,DLL,清单和工作簿都在同一个目录中。 另外应该指出的是,VSTO,可执行文件和/或安装不是我的select。 这就是为什么我试图坚持使用Excel。