2015-04-14 50 views
2

我目前正在尝试在Visual Basic 6应用程序中引用.NET COM库。我已经使用Regasm进行了注册,并且在我的课堂中将ComVisible设置为true。但是,当我尝试运行我的应用程序时,出现以下错误:ActiveX组件不能创建对象? .NET COM

ActiveX组件无法创建对象。

我的库包含一个非常简单的函数(因为我只是想测试我是否可以运行它),它只是返回字符串“Hello World”。我不得不使用不同的机器(机器1)来创建我的C#.Net类,然后将该类复制到另一台机器(机器2)上,然后从那里注册dll并将其引用到我的项目中。然后我在一台单独的机器(机器3)上测试了我的项目,这是我收到错误。

我真的需要帮助,我已经试图取消注册并重新注册它,但仍然无济于事。

+0

是的,你做错了什么。我们看不到你做错了。 –

+0

@HansPassant我在机器1上创建了一个C#库,然后将其复制到机器2上,在机器2上我注册了dll,它创建了一个.tlb文件。然后我在我的vb6应用程序中引用.tlb文件。但是,当我在机器3(目标机器)上测试我的项目时,出现上述错误。 – dantheman

+0

@HansPassant,do .tlb文件必须位于C:\ Windows \ system32文件夹中? – dantheman

回答

1

试试这个。

从提升的命令提示:

  1. RegAsm /codebase /tlb AssemblyName.dll。记下生成的.tlb文件。
  2. RegTlib File.tlb
  3. 打开您的VB6项目并引用.tlb文件。
+0

有没有办法查看dll是否实际注册,除了命令提示符说明它已成功注册之外。我的代码现在的问题是它正在查找错误的文件中的dll/.tlb – dantheman

+1

命令提示符是确定它是否已注册的最佳方法。要查看它使用的是哪个.dll,打开'regedit'并搜索COM组件的ProgID(ComponentName.Classname)。这会给你一个CLSID。然后在InProcServer32子项中搜索该CLSID - 这会告诉你在试图加载.DLL并返回一个COM接口指针时它将访问哪个文件。您可以删除这些键并在必要时重新注册组件。 –

+0

对于COM组件(ComponentName.ClassName),按ComponentName是否指名称空间? – dantheman

相关问题