我将尝试简要说明:我们使用Visual Basic 6.0编写的代码,我试图在Windows 7 64位计算机上编译.(以前这是在一台旧的XP计算机上编译的.)大多数代码似乎都能正确编译,但是某些具有属性的代码(如NewEnum)并不尊重VB属性.这是一个例子:
VB6方法如下所示:
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
'this property allows you to enumerate
'this collection with the For...Each syntax
Set NewEnum = mCol.[_NewEnum]
End Property
Run Code Online (Sandbox Code Playgroud)
这是使用时创建的默认Enumerator Class Builder Utility.
但是,编译代码时不遵循Attribute元素.使用OLE View程序,它显示属性被忽略.
XP计算机生成以下代码段:
[id(0xfffffffc), propget, hidden]
HRESULT NewEnum([out, retval] IUnknown** );
Run Code Online (Sandbox Code Playgroud)
但Windows 7计算机生成:
[id(0x68030000), propget]
HRESULT NewEnum([out, retval] IUnknown** );
Run Code Online (Sandbox Code Playgroud)
我试图将Visual Basic应用程序设置为在XP(Service Pack 3)兼容模式下运行,这没有帮助.
由于我们的应用程序的大小和复杂性,我们目前无法将它从VB6移植到.NET,我们需要将其编译.有谁知道如何正确配置VB6,以便它正确编译集合?