2015-01-15 37 views
2

引用VBA组件我有一个C#.NET 3.5的项目,遗憾的是依赖于几个VB6的ActiveX控件。运行时错误从C#

到现在为止,我已经能够通过简单地在我的项目增加了控制的参考和引用它们的正常愉快地访问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 )在我的项目中,有什么想法?

我不能给出具体的代码,它是根据一份NDA覆盖。

然而,这里是从对象浏览器示例代码与名称变更为保护不那么天真;)

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

ReturnConstants GoodMethod(); 
string prop1 
ReturnConstants prop2 

如果我尝试可以调用此方法,我得到上述错误信息在运行时:

Collection BadMethod(); 

所以调用返回,导致这一问题的VBA.Collection的方法。 这些是我无法控制的第三方控件,它们不会被重写.net

编辑:出于兴趣我在VS2010中尝试了一个快速虚拟项目,并且按预期完美工作,这可能是VS2012的一个问题。我见过一些帖子暗示2012年不会正确创建VBA的互用性,所以我会去看看我能在那里找到什么...

+2

不好看,看汉斯Passants评论:stackoverflow.com/questions/25816367/dll-for-vba-collection虽然如果它在VS2010中起作用,并且已将其缩小到VS 2012问题,请查看[此MSDN主题]中的最后一篇文章(https://social.msdn.microsoft.com/Forums/vstudio/en-US/4dc9413e-9c18-43d3-a989-27db6f8f4d96 /使用-comreference与 - 净-4-目标平台和 - aximp?论坛=的msbuild)由Marucio。无论如何,这些都是猜测,也许是一个ProcessMonitor,看看它找到一个它找不到的文件是什么,在哪里更orthadox TS'ing。 –

+0

我希望你能对它进行排序,我只想提到最后一件事。使用Interops,VS2012 [加载不同版本](http://stackoverflow.com/a/13328392/495455)!因此,检查模块窗口,看看是否有助于进一步缩小问题的范围。祝你好运! –

回答

2

感谢@Jeremy Thompson让我走上正轨,运行过程监视器向我显示,我的应用程序无法找到interop.VBA.dll文件,一旦解决了所有问题,都按预期工作。不知道为什么,这个作品开箱2010年和2012不上,但很高兴有一个解决方案