Cra*_*ney 5 .net vb6 com regfreecom
我已经尝试解决这个问题很长时间了,但似乎没有任何效果。
我有一个用 vb6 编写的 COM DLL。我在 .net 中添加对此 DLL 的引用,并将该引用的“isolated”和“copy local”属性设置为 true。显然这应该启用免注册 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
Run Code Online (Sandbox Code Playgroud)
当我在 DLL 正常注册的情况下运行它时,两个测试都成功。如果我使用 reg-free com,即使正常测试仍然成功,线程测试也会失败。看起来这将是一个巨大的解决方法。