我有一个 C# .NET 3.5 项目,不幸的是它依赖于几个 VB6 ActiveX 控件。
到目前为止,我已经能够通过简单地在项目中添加对控件的引用并正常引用它们来愉快地访问 ActiveX 控件中定义的数据容器和方法。
但是今天我遇到了障碍,我必须调用返回 VBA.Collection 的方法。
我的代码编译没有问题,但在运行时出现以下错误:
Could not load file or assembly 'Interop.VBA, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
我在我的项目中引用了 Interop.VBA(版本 6.0.0.0)和 Interop.VBRUN(版本 6.0.0.0),有什么想法吗?
我无法提供具体代码,它包含在保密协议(protocol)中。
但是,这里是来自对象浏览器的示例代码,其名称已更改,以保护不那么无辜的人;)
我可以从我的代码中引用以下属性和方法:
ReturnConstants GoodMethod();
string prop1
ReturnConstants prop2
如果我尝试调用此方法,我会在运行时收到上面的错误消息:
Collection BadMethod();
因此,是对返回 VBA.Collection 的方法的调用导致了问题。 这些是我无法控制的第 3 方控件,它们不会在 .net 中重写
编辑:出于兴趣,我在 VS2010 中尝试了一个快速虚拟项目,并且按预期完美运行,因此看来这可能是 VS2012 的问题。我看到一些帖子暗示 2012 没有正确为 VBA 创建互操作,所以我会去看看我能在那里找到什么......
最佳答案
感谢@Jeremy Thompson 让我走上正轨,运行进程监视器显示我的应用程序无法找到 interop.VBA.dll 文件,一旦修复,一切都会按预期工作。不知道为什么这在 2010 年而不是 2012 年可以开箱即用,但很高兴有一个解决方案
关于c# - 从 C# 引用 VBA 程序集时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958766/