首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将免费注册表COM用于.net项目中的vb6 dll引用?

如何将免费注册表COM用于.net项目中的vb6 dll引用?
EN

Stack Overflow用户
提问于 2009-05-01 15:34:21
回答 4查看 2.4K关注 0票数 5

我已经试图解决这个问题很长一段时间了,但似乎什么都没有奏效。

我有一个用vb6写的COM动态链接库。我在.net中添加了对此DLL的引用,并在引用上将“isolated”和“copy local”属性设置为true。显然,这是为了启用reg-free com。

但它不起作用。如果我在另一台计算机上尝试,或者用regsvr32注销该动态链接库,则尝试访问该动态链接库时会抛出一个异常(实际上是说所需的com类不存在)。DLL和清单文件与EXE在同一文件夹中,但它显然完全忽略了它们。

我做错了什么?我已经阅读了大量关于这方面的零星文章,但没有一篇给我一个有效的解决方案。我对visual studio进行了一些修补,但都没有效果。我对make-my-manifest进行了少量修改,但它不起作用(甚至在测试项目中也不起作用)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-24 16:29:23

我在非UI线程上创建和使用com类。显然,vb6 DLL上的Reg-Free com在这种情况下不起作用。下面的测试代码显示了这一点:

代码语言:javascript
复制
Private Sub RunTest() Handles Button1.Click
    Try
        Dim x As New RegTestProject.RegTestCall
        MsgBox(x.RegTestFunction())
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Private Sub RunThreadedTest() Handles Button2.Click
    'fails if reg-free COM is used'
    Dim t As New Threading.Thread(AddressOf RunTest)
    t.Start()
End Sub

当我使用正常注册的DLL运行此程序时,两个测试都成功。如果我使用无reg的com,即使正常测试仍然成功,线程测试也会失败。看起来这将是一个巨大的工作痛苦。

票数 4
EN

Stack Overflow用户

发布于 2009-05-01 15:54:20

我非常确定,当您以这种方式引用COM组件时,每次生成时都会发生COM组件导入。这意味着COM组件必须以传统的方式在将在其上构建项目的每台计算机上注册。

票数 3
EN

Stack Overflow用户

发布于 2009-05-01 15:52:15

这是一个描述使用免注册com互操作的link。如果你已经这样做了,请张贴你的清单文件。你可能有一个打字错误你失踪了。

编辑

只是想一想,在应用程序第一次在新机器上运行时注册dll可能会更简单。免费注册的com interopt只在Windows XP和更高版本上可用,所以如果你的目标是外面的任何恐龙,它都不会起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/811894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档