c# - 从 C# 引用 VBA 程序集时出现运行时错误

标签 c# collections vb6 interop

我有一个 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/

相关文章:

c# - 实现集合的简单方法?

excel - VB6中的ole excel对象

vb6 - 如何使用 VB6 连接到 LDAP 存储

java - LinkedHashMap 是在双向链表的帮助下实现的,是否可以用两种方式迭代它?

.net - 从 VB6 代码中释放 .NET 对象

c# - 静态类中的匿名方法是非静态的?如何调用它?

c# - 从 List<Dictionary<string, string>> 获取唯一值

c# - 在 Xamarin.Forms 页面中隐藏 iPhone X 的主页指示器

java - 使用哪种数据结构来存储条目及其时间戳(按排序顺序)

java - 合并 Map<String, List<String> Java 8 Stream