Registration Free COM を使用して Excel 2010 から .NET 呼び出しを行うのに苦労しています。基本的に、Excel マクロでいくつかの .NET API 関数を呼び出せるようにしたいと考えていました。.NET でラッパー 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
Registration 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>
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) Method 'CreatObject' of object IActCtx' failed. が発生することです。正直なところ、自分が間違っていることが何であるか、またはこれが可能であるかどうかさえわかりません。どんな助けや提案も大歓迎です。
DLL、マニフェスト、ワークブックはすべて同じディレクトリにあることに注意してください。また、VSTO、実行可能ファイル、および/またはインストールはオプションではないことに注意してください。そのため、Excel を使用することに固執しようとしています。