我们有一个用C#构建的ActiveX DLL; DLL用于VB6应用程序(它也将被传统的ASP应用程序使用)。
DLL是一个带有
的C#类库项目所有显然都设置得恰到好处。
证明是,我们已经用regasm / codebase / tlb注册了DLL:xxxxx和VB6 dev env可以在引用窗口中看到COM对象。
将COM DLL引用添加到项目后,Intellisense工作并看到一切正常,应用程序正确编译。
问题在于,如果我们不将DLL的副本放在与编译的应用程序exe文件相同的文件夹中,则在尝试实例化DLL中的类实例时会失败;返回的错误是“系统找不到指定的文件”。 如果DLL的副本与应用程序exe位于同一位置,则一切正常。
我发现了类似问题的参考,但没有提示或线索如何解决。
马里奥
答案 0 :(得分:2)
首先,VB6仅使用TypeLib进行智能感知,因此无法证明DLL的任何内容。
我建议您使用ProcessMonitor,找到here来监视加载VB6 dll的过程。确保它不在app文件夹中,将其保存在您注册的位置。您将能够看到注册表查找以查找路径,以及文件IO在搜索路径时。
如果没有解决问题,请回复结果。
答案 1 :(得分:0)
在VB6中,如果您正在使用RegAsm而不将程序集放在GAC中,则它必须与正在执行的应用程序位于同一目录中,除非您在RegAsm文件时使用/ Codebase选项。