【问题标题】:.net objects for 32 or 64 bit Excel?.net 对象用于 32 位还是 64 位 Excel?
【发布时间】:2013-11-25 19:40:08
【问题描述】:

我有一个 VB.net 项目,它构建并注册了一个 COM 库,我可以在我的开发机器上的 Excel 中打开和使用该库。那台机器恰好有 32 位 Excel。在我的另一台机器上,Excel 以 64 位安装,无法打开库,429。

其他线程建议代码本身可能没问题,只要我在“Any”下编译。

正确吗?为“any”编译的代码通常能够在 32 位和 64 位上运行吗?

相同的线程表明唯一真正的问题是 tlb/registration,并指向建议手动调用 regasm 以避免这种情况的文章。

这是正确的吗?

如果是这样,我应该有两个 tlb 文件吗?还是两个 COM 库?还是只有一个?

【问题讨论】:

  • 我认为您不能同时使用 32 位和 64 位库。如果您的应用程序以 64 位运行,则不能使用 32 位 COM 库(反之亦然)。另请阅读this answer on SO
  • 不,那不一样。我想将 64 位加载到 64 位,将 32 位加载到 32 位。他们试图将 32 位加载到 64 位。
  • 如果我错了,请纠正我:如果安装了 32 位版本的 Excel,您希望以 32 位运行您的应用程序;否则,如果安装了 64 位 Excel,则以 64 位运行您的应用程序?
  • 正确。但它是一个 DLL,而不是一个应用程序。
  • 如果您使用“任何 CPU”设置编译 DLL,它应该能够在 32 位和 64 位下运行。将使用此 DLL 的“主”应用程序将确定它是在 32 位还是 64 位下运行。我会说,试一试,看看它是否有效。

标签: vb.net excel-2010


【解决方案1】:

好的,它正在工作。我仍然不明白为什么这个解决方案有效,但它是:

  1. 使用“任何 CPU”设置编译 DLL
  2. 关闭 COM 注册,这不会有什么坏处,但只会让事情变得混乱
  3. 在您的 VS 项目的后期构建中添加两行:

    "%Windir%\Microsoft.NET\Framework\v4.0.30319\regasm" "$(TargetPath)" /tlb:DCFPropery32.tlb

    "%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm" "$(TargetPath)" /tlb:DCFPropery64.tlb

  4. 将 DLL 和 TLB 复制到目标机器

  5. 确定目标机器办公室的咬合度:

    http://www.howtogeek.com/howto/24259/

  6. 使用以下开关在该机器上运行正确版本(32 或 64)的 regasm:

    适用于 32 位办公室 c:\windows\microsoft.net\frameworks[版本号]\regasm [dll路径] /codebase

    适用于 64 位办公室 c:\windows\microsoft.net\frameworks64[版本号]\regasm [dll路径] /codebase

  7. 在目标平台上打开 Excel 并导航到 VBA 编辑器的“引用”对话框。浏览...到文件的位置,然后为您的平台选择正确的 TLB 版本。

希望这也适用于你们所有人!

此解决方案远非理想。一方面,微软一直在移动 regasm 的位置,所以没有简单的方法来编写脚本。另一方面,我不知道为什么需要调用 /codebase,但它似乎与文件的命名有关。最后,这意味着所有这些工作都需要在您想要运行它的每台机器上至少进行一些手动工作,否则您将需要费心制作安装程序!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-10
    • 2012-03-17
    • 2015-06-06
    • 2015-04-16
    • 2011-04-16
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多