首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Excel XLL中的VBA多个COM XLL中以编程方式引用

在Excel XLL中的VBA多个COM XLL中以编程方式引用
EN

Stack Overflow用户
提问于 2019-06-13 13:41:32
回答 2查看 291关注 0票数 0

因此,我使用Excel将两个COM XLL打包到一个XLL中。

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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出现在工具中

我看到这里可以在XLL中打包tlb,作为回报,它可以在VBA中引用以获得完整的早期绑定支持。

在一个XLL中打包几个Dlls,并以编程方式注册它们,以便早期绑定到intellisense和所有内容,这将是非常酷的。我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-13 18:13:17

只有一个.tlb文件可以嵌入到.xll中。

因此,您需要做的是从多个.tlb程序集生成一个.NET文件。这将需要一些努力-我不知道有一个工具会很容易做到这一点。参见这个StackOverflow问题:将两个.IDL文件或两个.tlb文件合并为一个文件

  • 也许在生成.idl文件之前,尝试生成.tlb文件并将这些文件合并为文本?
  • 或者使用类似于ILMerge的方法来组合程序集,然后在组合的程序集上运行TlbExp。
  • 否则,请找到TlbExp的源,并使其与多个程序集一起工作。

如果你试过这些,请告诉我们!

票数 1
EN

Stack Overflow用户

发布于 2019-06-24 14:43:27

因此,根据“戈弗特”的回答,我尝试了以下几种方法,并能让它发挥作用.

  • 从每个TLB中,使用OleWoo或OleViewer提取IDL定义。OleViewer必须以管理权限启动,不包含语法错误(如OleWoo ),并包含必要的导入。
  • 创建一个新的主IDL文件,并将每个IDL的库块中的所有定义粘贴到主IDL的库块中。
  • 您可以随意将主IDL中的库命名空间命名为任何名称空间,因为这里的名称空间并不重要,如果在正确的DLL位置正确注册了这些类型,您仍然可以创建在这个IDL中定义的那些COM类型。
  • 使用midl工具将IDL文件转换为TLB:
代码语言:javascript
复制
midl {Master IDL}.idl /tlb {Master IDL}.tlb
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56581867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档