所以我正在使用Excel-DNA在一个XLL中打包两个COM dll。
<ExternalLibrary Path="FancyDna.DllOne.dll" ExplicitExports="false" LoadFromBytes="true" ComServer="true" Pack="true" />
<ExternalLibrary Path="FancyDna.DllTwo.dll" ExplicitExports="false" LoadFromBytes="true" ComServer="true" Pack="true" />
在VBA中:
Sub TestEarlyBound()
Application.RegisterXLL Application.ActiveWorkbook.Path & "\build\FancyDna.Pack-AddIn64-packed.xll"
ThisWorkbook.VBProject.References.AddFromFile Application.ActiveWorkbook.Path & "\build\FancyDna.Pack-AddIn64-packed.xll"
Call CallDllOne
Call CallDllTwo
End Sub
但是,当我使用ThisWorkbook.VBProject.References.AddFromFile
在VBA中添加引用时,仅勾选了一个Dll并勾选了复选框。完成后,另一个dll将显示在工具->引用中,但未选中其复选框!
我here看到可以将tlb打包在XLL中,作为回报,可以在VBA中引用它以获得完整的早期绑定支持。
将多个Dll打包到一个XLL中并以编程方式注册它们以与intelisense和所有内容进行早期绑定真的很酷。我在这里做什么错了?
答案 0 :(得分:1)
.xll中只能嵌入一个.tlb文件。
因此,您需要做的是从多个.NET程序集中生成一个.tlb文件。 这将需要一些努力–我不知道可以轻松实现此目的的工具。请参阅以下StackOverflow问题:Merging two .IDL files or two .tlb files into one file
让我们知道您是否尝试其中任何一种!
答案 1 :(得分:0)
因此,根据@Govert的回答,我尝试了以下方法,可以使其工作...
midl {Master IDL}.idl /tlb {Master IDL}.tlb