Reg Free COM Interop无法在XP下运行

时间:2014-09-19 08:41:10

标签: vb6 windows-xp compatibility registration-free-com

我们正在使用我们公司的一个主要软件,该软件是用VB6编写的,并且太大而无法迁移。此外,我们还有一些旧的Windows XP PC仍在使用(没有争论,不是我的决定)。我们希望使用VB.NET程序集为VB6程序添加新功能。这适用于Win Vista及以上版本,但XP的行为不正常。

我尝试过: 我在VB .NET中创建了一个类库。使其成为COM-Visible并将其注册为com-interop。 我的目标是.NET Framework 4.0(也尝试过2.0) 然后我创建了一个带有简单函数的简单类,用于测试目的:

Imports System.Runtime.InteropServices
<Guid("b98ddfd4-f6bc-40d4-85eb-5bd45c272325")> _
Public Interface Class1_Interface
Function MyFunction(ByVal MyParam As String) As Boolean
End Interface

<Guid("0bbee3db-88e3-4089-adc1-f5a0cf9e1fda")> _
<ClassInterface(ClassInterfaceType.None)>
Public Class Class1 : Implements Class1_Interface

Public Function MyFunction(ByVal MyParam As String) As Boolean Implements Class1_Interface.MyFunction
Try
MyFunction = True
Catch ex As Exception
MyFunction = False
Dim FunctionName As String = System.Reflection.MethodBase.GetCurrentMethod().Name
End Try

End Function
End Class

我已经为X86编译了它。

然后我在VB6中添加了对它的引用,并在VB6中使用了这个简单的代码

Private Sub Form_Load()
Dim x As New Class1
MsgBox (x.MyFunction(""))
End Sub

然后我创建了一个清单并嵌入它: mt.exe -managedassemblyname:testDLL.dll -nodependency -out:testDLL.manifest mt.exe -manifest testDLL.manifest -outputresource:testDLL.dll;#1

然后我为exe创建了一个清单,其中只包含必要的最基本信息(Type =“win32”,名称,版本,processorarchitecture和带有名称,processorarchitecture和版本的汇编块)以及.Net Framework 4的appconfig与我的Framework 2.0 dll相同的错误,所以这应该是无关紧要的)

当我在高于XP的任何东西中执行我的VB6 exe时,一切正常。当我在XP上尝试时,我得到运行时错误'429'Activex组件无法创建对象

奇怪的是,我有一个更复杂的dll以完全相同的方式创建,只需要更多功能,使用报表查看器和sql。然而,这个复杂的DLL工作正常。我能找到的唯一相关区别是它使用WinForm作为类。不知道为什么它应该有所作为,但正如我所说,它是所有相同的方式来声明接口和类,创建清单和诸如此类的东西。

我不知道该怎么做了。我不知道是什么让单个DLL工作而其他一切都没有。

0 个答案:

没有答案