.net activex dll仅在与使用它的应用程序(VB6)相同的文件夹中有效

时间:2012-08-03 07:25:44

标签: .net dll com vb6 activex

我们有一个用C#构建的ActiveX DLL; DLL用于VB6应用程序(它也将被传统的ASP应用程序使用)。

DLL是一个带有

的C#类库项目
  • 源代码中的类和接口Guids属性
  • 项目中与COM相关的属性/设置
  • 源代码中的progid属性

所有显然都设置得恰到好处。

证明是,我们已经用regasm / codebase / tlb注册了DLL:xxxxx和VB6 dev env可以在引用窗口中看到COM对象。

将COM DLL引用添加到项目后,Intellisense工作并看到一切正常,应用程序正确编译。

问题在于,如果我们不将DLL的副本放在与编译的应用程序exe文件相同的文件夹中,则在尝试实例化DLL中的类实例时会失败;返回的错误是“系统找不到指定的文件”。 如果DLL的副本与应用程序exe位于同一位置,则一切正常。

我发现了类似问题的参考,但没有提示或线索如何解决。

马里奥

2 个答案:

答案 0 :(得分:2)

首先,VB6仅使用TypeLib进行智能感知,因此无法证明DLL的任何内容。

我建议您使用ProcessMonitor,找到here来监视加载VB6 dll的过程。确保它不在app文件夹中,将其保存在您注册的位置。您将能够看到注册表查找以查找路径,以及文件IO在搜索路径时。

如果没有解决问题,请回复结果。

答案 1 :(得分:0)

在VB6中,如果您正在使用RegAsm而不将程序集放在GAC中,则它必须与正在执行的应用程序位于同一目录中,除非您在RegAsm文件时使用/ Codebase选项。