简而言之,我构建了一个 C# 类库,它既是 COM 可见的,又是为 COM 互操作而注册的。我已经编译了库,从而生成了 .dll 和 .tlb 文件。
我有另一台运行 VB6 应用程序的机器。因此,我将 .dll 和 .tlb 文件复制到机器上的 C:/Windows/system32 文件夹中。然后我使用以下方法注册了这些文件:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\Windows\system32\TestClass.dll /tlb:TestClass.tlb
成功注册文件后,我从我的 VB6 应用程序中添加了对 Test.tlb 文件的项目引用,然后我尝试在我的新引用类中调用一个方法,如下所示:
Dim myObject As TestNamespace.TestClass
Set myObject = New TestNamespace.TestClass
MsgBox (myObject.TestMethod())
它不起作用,我收到 -2147024894 自动化错误。
我读过我不应该将 dll 安装到像 system32 这样的私有文件夹中。我应该在 GAC 中注册,或者我应该使用“/codebase”选项在另一个位置注册:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\TestClass.dll /tlb:TestClass.tlb /codebase
有什么理由我不应该使用 system32?过去从事此项目的开发人员已将此 VB6 项目使用的程序集文件放入 system32 中,似乎没有任何问题。
当我在 system32 位置注册我的 dll 时,我得到了自动化错误。当我在另一个位置(即 C:/)注册我的 dll 时,从 VB6 到我的类库的方法调用按预期工作。是什么赋予了?
我应该提一下,我们不会使用 GAC 来注册任何 DLL。就是那样子。
任何帮助表示赞赏。
麦克风