【发布时间】:2021-01-06 01:34:48
【问题描述】:
上下文
我需要创建一个 vb6 ocx 控件并在 vb.net 中使用它。
本质上就是在老vb6PictureBox上绘图的方法集合。
.ocx 文件创建后,我使用通常的regsvr32 过程将其记录下来,并将其导入到 Visual Studio 工具箱中。
我可以毫无问题地将新控件添加到表单中,并且它会运行。
问题
如果我添加一个button 并在它的点击子中调用控件的一个函数(它应该在picturebox 上画一条线),则会引发异常:
System.IO.FileNotFoundException
无法加载文件或程序集“Interop.VBRUN, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null”或其依赖项之一。
尝试
- 我尝试将所有控制代码复制到一个新项目中并再次导出 ocx。 没有结果。
- 我尝试在 Visual Studio 2008 和 Visual Studio 2019(Windows XP 和 Windows 10 上)上使用该控件。 没有结果。
- 我试图注释掉大部分的 ocx 控制代码,只保留几个激活的方法。 没有结果。
- 我尝试在 vb6 项目中使用该控件。 效果很好。
- 我尝试导入此 Interop.VBRUN 作为参考,但在任何地方都找不到。
注意事项
我在带有 Windows XP 的虚拟机上使用 Vb6。我已经在此虚拟机上及其外部(在 Windows 10 上)测试了 Visual Studio(2008 和 2019)中的 ocx。我的设置:
- 目标框架 = .NET Framework 4;
- 目标 CPU = x86
我还在 stackoverflow 和网络上搜索了解决方案:类似的结果很少,但没有一个有效的解决方案。
问题
我该如何解决这个问题?这是什么Interop.VBRUN?问题是由代码(我应该重写)还是其他原因引起的?
【问题讨论】:
-
当你说“没有结果”时——这是什么意思?我认为您的意思是,这些试验没有任何区别,即导致相同的错误?
-
Interop.x是 COM 包x的托管 COM 互操作程序集。我认为它很可能是通过在类型库上运行 tlbimp 自动创建的,因此请在构建的输出文件夹中查找它。 -
克雷格的评论是正确的。您应该查找文件“Interop.VBRUN.dll”并在您的项目中添加对它的引用
-
@UuDdLrLrSs 是:“no result”代表“这没有区别,错误仍然存在”
-
AxInterop.文件被创建为 OCX 文件的 .NET “包装器”。Interop.文件是相同的,但用于常规 DLL。通常,如果您有一个 VB6 DLLabc.dll并且您从 .NET 项目中引用了它,那么文件Interop.abc.dll将被自动创建,并作为参考添加。这只是仅供参考;它没有解释为什么缺少 VBRUN 文件。
标签: vb.net vb6 vb6-migration ocx