Vb.net 32位或64位Excel的.net对象?

Vb.net 32位或64位Excel的.net对象?,vb.net,excel-2010,Vb.net,Excel 2010,我有一个VB.net项目,它构建并注册了一个COM库,我可以在我的开发机器上打开并在Excel中使用它。那台机器正好有32位的Excel。在我的另一台机器上,Excel以64位安装,不会打开库429 其他线程建议,只要我在“Any”下编译代码,代码本身就可能很好 对吗?为“any”编译的代码通常能够在32位和64位上运行吗 同样的线程表明,唯一真正的问题是tlb/注册,并指出一些文章建议手动调用regasm以避免这种情况 这是正确的吗 如果是,我应该有两个tlb文件吗?还是两个ComLib?还是

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

其他线程建议,只要我在“Any”下编译代码,代码本身就可能很好

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

同样的线程表明,唯一真正的问题是tlb/注册,并指出一些文章建议手动调用regasm以避免这种情况

这是正确的吗


如果是,我应该有两个tlb文件吗?还是两个ComLib?还是只有一个?

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

  • 使用“任意CPU”设置编译DLL
  • 关闭COM注册,这不会有什么坏处,但以后会让事情变得混乱
  • 在VS项目的后期生成中添加两行:

    “%Windir%\Microsoft.NET\Framework\v4.0.30319\regasm”“$(TargetPath)”/tlb:dcfproperty32.tlb

    “%Windir%\Microsoft.NET\Framework64\v4.0.30319\regasm”“$(TargetPath)”/tlb:dcfproperty64.tlb

  • 将DLL和TLB复制到目标计算机

  • 确定目标机器的办公室的位置:

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

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

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

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

  • 希望这对你们所有人都有用


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

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