1

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

DLL 是一个 C# 类库项目

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

所有显然都正确设置。

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

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

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

我发现了对类似问题的引用,但没有关于如何解决的提示或线索。

马里奥

4

2 回答 2

2

首先,VB6 仅将 TypeLib 用于智能感知,因此这并不能证明关于 DLL 的任何内容。

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

如果这不能解决问题,请发回结果。

于 2012-08-03T11:49:11.847 回答
0

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

于 2012-08-03T15:38:13.197 回答