加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在.net项目中使用Reg-Free COM进行vb6 dll引用?

发布时间:2020-12-17 07:25:04 所属栏目:百科 来源:网络整理
导读:我一直试图解决这个问题很长一段时间,似乎没有任何作用. 我有一个用vb6编写的COM DLL.我在.net中添加了对此DLL的引用,并在引用上将’isolated’和’copy local’属性设置为true.显然这应该是启用reg-free com. 但它不起作用.如果我尝试使用另一台计算机,或使
我一直试图解决这个问题很长一段时间,似乎没有任何作用.

我有一个用vb6编写的COM DLL.我在.net中添加了对此DLL的引用,并在引用上将’isolated’和’copy local’属性设置为true.显然这应该是启用reg-free com.

但它不起作用.如果我尝试使用另一台计算机,或使用regsvr32取消注册DLL,尝试访问DLL会引发异常(实际上是说所需的com类不存在). DLL和清单文件与EXE位于同一文件夹中,但它显然完全忽略了它们.

我究竟做错了什么?我已经阅读了大量关于此的散文,但没有一篇能给我一个有效的解决方案.我用视觉工作室修补无济于事.我用make-my-manifest修改了一小部分,但它没有用(甚至在测试项目上).

解决方法

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

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-free com,即使正常测试仍然成功,线程测试也会失败.看起来这对于解决方案来说将是一个巨大的痛苦.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读