从C#引用VBA程序集的运行时错误

时间:2015-01-15 07:47:41

标签: c# collections vb6 interop

我有一个C#.NET 3.5项目,遗憾的是它依赖于几个VB6 ActiveX控件。

到目前为止,我已经能够愉快地访问ActiveX控件中定义的数据容器和方法,只需在项目中添加对控件的引用并正常引用它们。

然而,当我不得不调用一个返回VBA.Collection的方法时,我遇到了麻烦。

我的代码将编译没有问题,但在运行时我收到以下错误:

  

无法加载文件或程序集“Interop.VBA,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。系统找不到指定的文件。

我在项目中引用了Interop.VBA(版本6.0.0.0)和Interop.VBRUN(版本6.0.0.0),有什么想法吗?

我无法提供具体代码,它包含在NDA中。

但是,这里是来自对象浏览器的示例代码,其名称已更改以保护不那么无辜;)

我可以从我的代码中引用以下属性和方法:

ReturnConstants GoodMethod(); 
string prop1 
ReturnConstants prop2 

如果我尝试可以调用此方法,我会在运行时收到上面的错误消息:

Collection BadMethod();

因此调用返回导致问题的VBA.Collection的方法。 这些是我无法控制的第三方控件,它们不会在.net

中重写

编辑:出于兴趣,我去了VS2010尝试了一个快速虚拟项目,并且按预期工作得很好,所以看起来这可能是VS2012的一个问题。我看过一些帖子暗示2012年没有正确创建VBA的interops,所以我会去看看我能找到的......

1 个答案:

答案 0 :(得分:2)

感谢@Jeremy Thompson让我走上正轨,运行进程监视器向我显示我的应用程序无法找到interop.VBA.dll文件,一旦修复了一切正常工作。不知道为什么这在2010年而不是2012年开箱即用,但很高兴有一个解决方案