简而言之,我已经构建了一个 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 这样的私有(private)文件夹中。我应该在 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。就是那样子。

任何帮助表示赞赏。

麦克风

最佳答案

我对 system32 中的 dll 使用 regasm 没有任何问题。我总是使用/Codebase 开关,它将 tlb 的位置放在注册表中,这样 VB6 就不会混淆。

有关更多信息,请参阅 MSDN page

关于vb6 - VB6 应用程序中使用的类库的 RegAsm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2914738/

10-13 07:08