我有一个VB.net项目,可以构建和注册一个COM库,我可以在我的开发机器上打开并在Excel中使用它。那台机器碰巧有32位Excel。在我的另一台机器上,Excel以64位安装,不会打开库,429。
其他线程建议代码本身很可能,只要我在“Any”下编译。
这是对的吗?编译为“any”的代码通常能够在32位和64位上运行吗?
同样的线程表明唯一真正的问题是tlb / registration,并指向建议手动调用regasm以避免这种情况的文章。
这是对的吗?
如果是这样,我应该有两个tlb文件吗?还是两个COM库?或只是一个?
答案 0 :(得分:1)
好的,它正在发挥作用。我仍然不明白为什么这个解决方案有效,但这里是:
在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
将DLL和TLB复制到目标计算机
确定目标机器办公室的位编码:
使用以下开关在该计算机上运行正确的regasm版本(32或64):
FOR 32-BIT OFFICE c:\ windows \ microsoft.net \ frameworks [版本号] \ regasm [dll的路径] / codebase
为64位办公室 c:\ windows \ microsoft.net \ frameworks64 [版本号] \ regasm [dll的路径] / codebase
在目标平台上打开Excel并导航到VBA编辑器的“参考”对话框。浏览...到文件的位置,并为您的平台选择正确的TLB版本。
希望这也适用于所有人!
这个解决方案远非理想。首先,微软一直在移动regasm的位置,所以没有简单的方法来编写这个脚本。另一方面,我不知道为什么我需要调用/ codebase,但它似乎与文件的命名有关。最后,这意味着所有这些工作都需要至少在您想要运行它的每台机器上进行一些手动操作,否则您将需要经历制作安装程序的麻烦!